亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

pycharm的python_stubs是什么

發布時間:2021-03-10 15:29:28 來源:億速云 閱讀:1173 作者:TREX 欄目:開發技術

本篇內容介紹了“pycharm的python_stubs是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

最近在寫udp socket程序時,對幾個函數(如sendto)command+左擊時,發現跳轉到了這個python文件里面去了。(默認應該是到函數源碼那里)

/PyCharm2018.1/python_stubs/160944109/_socket.py

定義了如下的偽函數

 def send(self, data, flags=None): # real signature unknown; restored from __doc__
 """
 send(data[, flags]) -> count

 Send a data string to the socket. For the optional flags
 argument, see the Unix manual. Return the number of bytes
 sent; this may be less than len(data) if the network is busy.
 """
 pass

 def sendall(self, data, flags=None): # real signature unknown; restored from __doc__
 """
 sendall(data[, flags])

 Send a data string to the socket. For the optional flags
 argument, see the Unix manual. This calls send() repeatedly
 until all data is sent. If an error occurs, it's impossible
 to tell how much data has been sent.
 """
 pass

google了下,發現已經有人在stackoverflow提出相關問題,我這里簡單提煉一下。

https://stackoverflow.com/questions/24266114/pycharm-what-is-python-stubs

什么情況下會出現跳轉到python_stubs?

當我們調用的函數是內置函數或僅二進制存在的函數(沒有py文件,只有pyc等)時,pycharm會對某個版本進行硬編碼而生成的偽函數(實際不是調用的這個,只是方便我們做開發)。

想一想pycharm為了方便我們,真是煞費苦心。

補充知識:Python3自定義日志類 mylog

大家還是直接看代碼吧!

#encoding=utf-8

import os, sys
import datetime
import time


class Mylog(object):

 # 根文件夾
 root_dir = sys.path[0]
 # 根目錄
 root_path = sys.path[0] + os.path.sep
 # 系統目錄分割線
 sys_sep = os.path.sep
 # 配置
 option = {
 # 日志級別: 0:全部,1:調試,2:警告,3:錯誤
 'level': 0,
 # 是否開啟,如果關閉則不輸出也不記錄日志
 'is_open': True,
 # 是否print輸出
 'is_print': True,
 # 是否記錄到日志文件
 'is_write': True,
 # 是否在每條日志內容前面加前綴
 'is_prefix': True,
 # 如果開啟了每條日志前加前綴,設置日志級別為1的前綴
 'level_1_prefix': 'Test: ',
 # 如果開啟了每條日志前加前綴,設置日志級別為2的前綴
 'level_2_prefix': 'Warning: ',
 # 如果開啟了每條日志前加前綴,設置日志級別為3的前綴
 'level_3_prefix': 'Error: ',
 # 存放日志文件的根文件夾名稱
 'root_dir_name': 'mylog',
 # 自定義存放日志文件的文件名稱,此文件夾是在 root_dir_name 文件夾下
 'dir_name': ''
 }

 def __init__(self, config=None):
 if config is not None:
  self.option.update(dict(config))

 # 日志保存的文件夾(全路徑)
 save_dir = self.root_path + self.option['root_dir_name']

 # 創建文件夾
 if os.path.isdir(save_dir) is not True:
  os.mkdir(save_dir)
 if len(self.option['dir_name']) > 0:
  save_dir += self.sys_sep + self.option['dir_name']
  if os.path.isdir(save_dir) is not True:
  os.mkdir(save_dir)

 self.save_dir = save_dir
 self.save_path = save_dir + self.sys_sep

 '''
 輸入日志/記錄日志
 '''
 def log(self, content='', level=0):
 self._print_log(content, level)
 self._write_log(content, level)

 '''
 輸入日志
 '''
 def _print_log(self, content, level):
 if self.option['is_open'] is True and self.option['is_print'] is True:
  if self.option['level'] == 0 or self.option['level'] == level:
  if level > 0:
   content = self.option['level_' + str(level) + '_prefix'] + content
  print(content)

 '''
 記錄日志
 '''
 def _write_log(self, content, level):
 if self.option['is_open'] is True and self.option['is_print'] is True:
  if self.option['level'] == 0 or self.option['level'] == level:
  if self.option['is_prefix'] is True:
   today = datetime.date.today()
   file_name = str(today) + '.log'
   now = time.strftime("%H:%M:%S")
   log_file = self.save_path + file_name
   if level > 0:
   content = self.option['level_' + str(level) + '_prefix'] + content
   if os.path.isfile(log_file):
   save_file = open(log_file, 'a')
   else:
   save_file = open(log_file, 'w')
   save_file.write(str(now) + "\r\n" + content + "\r\n")
   save_file.close()


 

**重點內容
#!/usr/bin/env python
#-*- coding: GBK -*-
__author__ = 'DiaoHuabin'

import logging
import getpass
import sys

#定義MyLog類
class MyLog(object):
 '''這個類用于創建一個自用的log'''
 def __init__(self): #類MyLog的構造函數
 user = getpass.getuser() #返回用戶的登錄名
 self.logger = logging.getLogger(user) #返回一個特定名字的日志
 self.logger.setLevel(logging.DEBUG) #對顯示的日志信息設置一個閾值低于DEBUG級別的不顯示
 logFile = './'+sys.argv[1][0:-3] + '.log' # 日志文件名
 formatter = logging.Formatter('%(asctime)-12s $(levelname)-8s %(name)-10s %(message)-12s')

 '''日志顯示到屏幕上并輸出到日志文件內'''
 logHand = logging.FileHandler(logFile) #輸出日志文件,文件名是logFile
 logHand.setFormatter(formatter) #為logHand以formatter設置格式
 logHand.setLevel(logging.ERROR) #只有錯誤才被記錄到logfile中

 logHandSt = logging.StreamHandler() #class logging.StreamHandler(stream=None)
 # 返回StreamHandler類的實例,如果stream被確定,使用該stream作為日志輸出,反之,使用
 #sys.stderr
 logHandSt.setFormatter(formatter) #為logHandSt以formatter設置格式

 self.logger.addHandler(logHand) #添加特定的handler logHand到日志文件logger中
 self.logger.addHandler(logHandSt) #添加特定的handler logHandSt到日志文件logger中

 '''日志的5個級別對應以下的五個函數'''
 def debug(self,msg):
 self.logger.debug(msg) #Logs a message with level DEBUG on this logger.
 # The msg is the message format string

 def info(self,msg):
 self.logger.info(msg)

 def warn(self,msg):
 self.logger.warn(msg)

 def error(self,msg):
 self.logger.error(msg)

 def critical(self,msg):
 self.logger.critical(msg)

if __name__ == '__main__':
 mylogw = MyLog()
 mylogw.debug("I'm debug")
 mylogw.info("I'm info")
 mylogw.warn("I'm warn")
 mylogw.error("I'm error")
 mylogw.critical("I'm critical")

pycharm的python_stubs是什么

“pycharm的python_stubs是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌拉特中旗| 翁源县| 富顺县| 克什克腾旗| 株洲县| 东乡县| 白山市| 大名县| 贞丰县| 浦北县| 望都县| 乐业县| 嘉善县| 秦安县| 全州县| 武夷山市| 宣武区| 合川市| 丹东市| 琼中| 敖汉旗| 光泽县| 冕宁县| 汉中市| 客服| 静乐县| 长沙市| 义马市| 吉首市| 安多县| 纳雍县| 乐业县| 台山市| 陈巴尔虎旗| 四子王旗| 丰台区| 改则县| 泗水县| 柏乡县| 仙桃市| 甘南县|