pycharm的python_stubs問(wèn)題
最近在寫udp socket程序時(shí),對(duì)幾個(gè)函數(shù)(如sendto)command+左擊時(shí),發(fā)現(xiàn)跳轉(zhuǎn)到了這個(gè)python文件里面去了。(默認(rèn)應(yīng)該是到函數(shù)源碼那里)
/PyCharm2018.1/python_stubs/160944109/_socket.py
定義了如下的偽函數(shù)
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了下,發(fā)現(xiàn)已經(jīng)有人在stackoverflow提出相關(guān)問(wèn)題,我這里簡(jiǎn)單提煉一下。
https://stackoverflow.com/questions/24266114/pycharm-what-is-python-stubs
什么情況下會(huì)出現(xiàn)跳轉(zhuǎn)到python_stubs?
當(dāng)我們調(diào)用的函數(shù)是內(nèi)置函數(shù)或僅二進(jìn)制存在的函數(shù)(沒(méi)有py文件,只有pyc等)時(shí),pycharm會(huì)對(duì)某個(gè)版本進(jìn)行硬編碼而生成的偽函數(shù)(實(shí)際不是調(diào)用的這個(gè),只是方便我們做開發(fā))。
想一想pycharm為了方便我們,真是煞費(fèi)苦心。
補(bǔ)充知識(shí):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 # 系統(tǒng)目錄分割線 sys_sep = os.path.sep # 配置 option = { # 日志級(jí)別: 0:全部,1:調(diào)試,2:警告,3:錯(cuò)誤 'level': 0, # 是否開啟,如果關(guān)閉則不輸出也不記錄日志 'is_open': True, # 是否print輸出 'is_print': True, # 是否記錄到日志文件 'is_write': True, # 是否在每條日志內(nèi)容前面加前綴 'is_prefix': True, # 如果開啟了每條日志前加前綴,設(shè)置日志級(jí)別為1的前綴 'level_1_prefix': 'Test: ', # 如果開啟了每條日志前加前綴,設(shè)置日志級(jí)別為2的前綴 'level_2_prefix': 'Warning: ', # 如果開啟了每條日志前加前綴,設(shè)置日志級(jí)別為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'] # 創(chuàng)建文件夾 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() **重點(diǎn)內(nèi)容 #!/usr/bin/env python #-*- coding: GBK -*- __author__ = 'DiaoHuabin' import logging import getpass import sys #定義MyLog類 class MyLog(object): '''這個(gè)類用于創(chuàng)建一個(gè)自用的log''' def __init__(self): #類MyLog的構(gòu)造函數(shù) user = getpass.getuser() #返回用戶的登錄名 self.logger = logging.getLogger(user) #返回一個(gè)特定名字的日志 self.logger.setLevel(logging.DEBUG) #對(duì)顯示的日志信息設(shè)置一個(gè)閾值低于DEBUG級(jí)別的不顯示 logFile = './'+sys.argv[1][0:-3] + '.log' # 日志文件名 formatter = logging.Formatter('%(asctime)-12s $(levelname)-8s %(name)-10s %(message)-12s') '''日志顯示到屏幕上并輸出到日志文件內(nèi)''' logHand = logging.FileHandler(logFile) #輸出日志文件,文件名是logFile logHand.setFormatter(formatter) #為logHand以formatter設(shè)置格式 logHand.setLevel(logging.ERROR) #只有錯(cuò)誤才被記錄到logfile中 logHandSt = logging.StreamHandler() #class logging.StreamHandler(stream=None) # 返回StreamHandler類的實(shí)例,如果stream被確定,使用該stream作為日志輸出,反之,使用 #sys.stderr logHandSt.setFormatter(formatter) #為logHandSt以formatter設(shè)置格式 self.logger.addHandler(logHand) #添加特定的handler logHand到日志文件logger中 self.logger.addHandler(logHandSt) #添加特定的handler logHandSt到日志文件logger中 '''日志的5個(gè)級(jí)別對(duì)應(yīng)以下的五個(gè)函數(shù)''' 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問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
利用Python代碼實(shí)現(xiàn)一鍵摳背景功能
這篇文章主要給大家介紹了關(guān)于如何利用Python代碼實(shí)現(xiàn)一鍵摳背景的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Python實(shí)現(xiàn)一元一次與一元二次方程求解
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)一元一次與一元二次方程的求解,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-06-06Django media static外部訪問(wèn)Django中的圖片設(shè)置教程
這篇文章主要介紹了Django media static外部訪問(wèn)Django中的圖片設(shè)置教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04Django中redis的使用方法(包括安裝、配置、啟動(dòng))
下面小編就為大家分享一篇Django中redis的使用方法(包括安裝、配置、啟動(dòng)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02Python實(shí)現(xiàn)SMTP發(fā)送郵件詳細(xì)教程
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)SMTP發(fā)送郵件詳細(xì)教程,附SMTP郵件發(fā)送代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08Python實(shí)現(xiàn)Excel和CSV之間的相互轉(zhuǎn)換
通過(guò)使用Python編程語(yǔ)言,編寫腳本來(lái)自動(dòng)化Excel和CSV之間的轉(zhuǎn)換過(guò)程,可以批量處理大量文件,定期更新數(shù)據(jù),并集成轉(zhuǎn)換過(guò)程到自動(dòng)化工作流程中,本文將介紹如何使用Python 實(shí)現(xiàn)Excel和CSV之間的相互轉(zhuǎn)換,需要的朋友可以參考下2024-03-03解決python matplotlib imshow無(wú)法顯示的問(wèn)題
今天小編就為大家分享一篇解決python matplotlib imshow無(wú)法顯示的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05python實(shí)現(xiàn)微信自動(dòng)回復(fù)及批量添加好友功能
這篇文章主要介紹了python實(shí)現(xiàn)微信自動(dòng)回復(fù)及python 批量生成微信添加好友截圖功能的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07python通過(guò)socket實(shí)現(xiàn)多個(gè)連接并實(shí)現(xiàn)ssh功能詳解
這篇文章主要介紹了python通過(guò)socket實(shí)現(xiàn)多個(gè)連接并實(shí)現(xiàn)ssh功能詳解,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11python sitk.show()與imageJ結(jié)合使用常見(jiàn)的問(wèn)題
這篇文章主要介紹了python sitk.show()與imageJ結(jié)合使用常見(jiàn)的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04