python執行函數
⑴ python 執行函數長時間不打日誌,檢測是否還在運行
pyhon的一個函數在執行I/O參數比如文件讀寫,socket正在等待數據時是不能幹其他事情的,包括打日誌。如果想讓一個文件准備好讀寫了或者一個socket有數據可以直接接收時讓操作系統通知程序的話,可以試試select庫
⑵ python所有內置函數的定義詳解
1、定義函數
函數是可重用的程序。本書中已經使用了許多內建函數,如len()函數和range()函數,但是還沒自定義過函數。定義函數的語法格式如下:
def 函數名(參數):
函數體
定義函數的規則如下:
①關鍵字def用來定義一個函數,它是define的縮寫。
②函數名是函數的唯一標識,函數名的命名規則遵循標識符的命名規則。
③函數名後面一定要緊跟著一個括弧,括弧內的參數是可選的,括弧後面要有冒號。
④函數體(statement)為一個或一組Python語句,注意要有縮進。
⑤函數體的第一行可以有文檔字元串,用於描述函數的功能,用三引號括起來。
按照定義規則,可以定義第一個函數了:
>>>defhello_world():
...print('Hello,world!')#注意函數體要有縮進
...
>>>hello_world()
Hello,world!
>>>a=100#全局變數
>>>deftest1():
...print(a)
...
>>>deftest2():
...print(a)
...
>>>test1()
100
>>>test2()
100
>>>deftest1():
...a=100#局部變數
...print(a)
...
>>>deftest2():
...print(a)
...
>>>test1()
100
>>>print(a)
Traceback(mostrecentcalllast):
File"<stdin>",line1,in<mole>
NameError:name'a'isnotdefined
>>>test2()
Traceback(mostrecentcalllast):
File"<stdin>",line1,in<mole>
File"<stdin>",line2,intest2
NameError:name'a'isnotdefined
>>>deftest1():
...globala#全局變數
...a=100
...print(a)
...
>>>deftest2():
...print(a)
...
>>>test1()
100
>>>print(a)
100
>>>test2()
100
>>>a=100#全局變數
>>>deftest1():
...a=200#同名局部變數
...print(a)
...
>>>deftest2():
...print(a)
...
>>>test1()
200
>>>test2()
100
這個函數不帶任何參數,它的功能是列印出「Hello,world!」。最後一行代碼hello_world()是調用函數,即讓Python執行函數的代碼。
2、全局變數和局部變數
全局變數是定義在所有函數外的變數。例如,定義一個全局變數a,分別在函數test1()和test2()使用變數a:
定義了全局變數a之後,在函數test1()和test2()內都可以使用變數a,由此可知,全局變數的作用范圍是全局。
局部變數是在函數內定義的變數,除了用關鍵字global修飾的變數以外。例如,在函數test1()內定義一個局部變數a,分別在函數外和另一個函數test2()內使用變數a:
Python解釋器提示出錯了。由於局部變數a定義在函數test1()內,因此,在函數test1()內可以使用變數a,但是在函數外或者另一個函數test2()內使用變數a,都會報錯,由此可見,局部變數的作用范圍是定義它的函數內部。
一般情況下,在函數內聲明的變數都是局部變數,但是採用關鍵字global修飾的變數卻是全局變數:
這個程序與上個程序相比,只是在函數test1()中多了一行代碼「global a」,程序便可以正確運行了。在函數test1()中,採用關鍵字global修飾了變數a之後,變數a就變成了全局變數,不僅可以在該函數內使用,還可以在函數外或者其他函數內使用。
如果在某個函數內局部變數與全局變數同名,那麼在該函數中局部變數會覆蓋全局變數:
由於在函數test1()中定義了一個與全局變數同名的局部變數a,因此,在函數test1()中全局變數a的值被局部變數覆蓋了,但是在函數test2()中全局變數a的值沒有被覆蓋。
綜上所述,在Python中,全局變數保存的數據供整個腳本文件使用;而局部變數只用於臨時保存數據,變數僅供局部代碼塊使用。
⑶ python如何定義和調用函數
自定義函數用
def 函數名(參數):
(縮進)寫具體的函數部分,和寫普通程序一樣,只不過用return來返回需要的結果。
主程序裡面和使用普通內置函數一樣,函數名(參數)。
⑷ python 怎麼根據參數執行不同的函數
使用字典,比如下面這樣:
1
2
3
4
5
6
7
8
9
10
11
12
13
def funcA():
pass
def funcB():
pass
def func_None():
print "cannot find func"
func_dict = {"a": funcA, "b": funcB}
def func(x):
return func_dict.get(x, func_None)()
在有switch的語言中,一般都是使用switch來根據入參進行判斷。但是python中沒有switch,因為根本不需要!!使用字典代替switch,性能更高,而且這種方法的表述能力更強一點。
另外func_dict.get(x, func_None)()中方法是從字典中取出值對應的函數對象,然後後面加上()是執行該對象的__call__方法。因為python中函數就是實現了__call__方法的對象。所以可以這么使用。
⑸ 為什麼python的函數沒被調用就被執行了
因為你引用了其他模塊的函數,但是該模塊裡面有不是包含在函數中的代碼,你在引用該模塊中的函數時候會先執行被引用模塊的代碼。例如:
a.py裡面有 a = 10
print(a)
def test():
print(a)
然後你在b.py 文件中引入了test函數 :from a import test
test() 執行的順序就是 先執行 a = 10 ,print(a) ,test() 執行b.py中的代碼的時候從from 那一句開始所以a 中的代碼也被執行了
⑹ 如何實現python 條件執行函數,指定時間未執行過則自動執行一次
寫一個類. 類里留個變數(fun2_tiime)記錄函數2執行的時間戳.
類里寫個無限循環的函數, 不斷比較 變數(fun2_tiime)當前時間差值, 如果差值大於20就執行函數2.
⑺ python怎麼單獨運行某個函數
答: 我所知道的有兩種方法。
- 第1種方法就是使用Jupyter編寫Python代碼, 把不同的內容編寫在不同的代碼塊裡面,這樣的話我們就可以單獨運行某一個代碼塊,而不需運行整個文件;
- 使用Python進行代碼編寫時,將其設置為科學模式,並在函數前面添加#%%標志,然後也可以達到一個一個代碼塊的效果。企業可以單獨運行某一個部分。
希望能夠幫助到你。
⑻ python怎麼調用自己寫的函數
直接在你需要調用的地方寫上函數名字加括弧就可以
⑼ python怎麼實現按照文本順序執行函數
Python讀文本可以用with上下文管理器。根據文本來執行對應名字的函數可以用getatter方法。代碼如下:
首先,新建文本文件test.txt,內容如下:
func1,life is short
func2,use python
func1, hello word
下面是Python代碼,聲明兩個function,功能是列印出傳入的參數。main裡面的把內容就是按照文本的順序,傳入參數執行對應的function:
class Example(object):
def __init__(self):
pass
def func1(self, arg):
print 'this is func1, arg is {}.'.format(arg)
def func2(self, arg):
print 'this is func2, arg is {}.'.format(arg)if __name__ == '__main__':
example_instance = Example()
with open('test.txt', 'r') as f:
for line in f.readlines():
function_name, args = line.strip().split(',')
getattr(example_instance, function_name)(args)
得到這樣的輸出:
this is func1, arg is life is short.
this is func2, arg is use python.
this is func1, arg is hello word.
⑽ python的函數是怎麼執行的
n=0時執行到了for i in range(2,n),這個range是個空列表[],故一次也不會進入for循環執行「 fibs.append(fibs[-1] + fibs[-2])」,,直接返回[1,1],故不報錯
n=1返回[1]
n=2返回[1,1]
n=3及以上,進入for循環,fibs每次增加一個元素,其值為倒數第1個和倒數第2個元素之和
改為if...elif...else可以如下:
deffib(n):
ifn<1:
returnNone
elifn==1:
return[1]
elifn==2:
return[1,1]
else:
fibs=[1,1]
foriinrange(2,n):
fibs.append(fibs[-1]+fibs[-2])
returnfibs
print(fib(10))