❶ python 定義函數
python 定義函數:
在Python中,可以定義包含若干參數的函數,這里有幾種可用的形式,也可以混合使用:
1. 默認參數
最常用的一種形式是為一個或多個參數指定默認值。
>>> def ask_ok(prompt,retries=4,complaint='Yes or no Please!'):
while True:
ok=input(prompt)
if ok in ('y','ye','yes'):
return True
if ok in ('n','no','nop','nope'):
return False
retries=retries-1
if retries<0:
raise IOError('refusenik user')
print(complaint)
這個函數可以通過幾種方式調用:
只提供強制參數
>>> ask_ok('Do you really want to quit?')
Do you really want to quit?yes
True
提供一個可選參數
>>> ask_ok('OK to overwrite the file',2)
OK to overwrite the fileNo
Yes or no Please!
OK to overwrite the fileno
False
提供所有的參數
>>> ask_ok('OK to overwrite the file?',2,'Come on, only yes or no!')
OK to overwrite the file? test
Come on, only yes or no!
OK to overwrite the file?yes
True
2. 關鍵字參數
函數同樣可以使用keyword=value形式通過關鍵字參數調用
>>> def parrot(voltage,state='a stiff',action='voom',type='Norwegian Blue'):
print("--This parrot wouldn't", action, end=' ')
print("if you put",voltage,"volts through it.")
print("--Lovely plumage, the",type)
print("--It's",state,"!")
>>> parrot(1000)
--This parrot wouldn't voom if you put 1000 volts through it.
--Lovely plumage, the Norwegian Blue
--It's a stiff !
>>> parrot(action="vooooom",voltage=1000000)
--This parrot wouldn't vooooom if you put 1000000 volts through it.
--Lovely plumage, the Norwegian Blue
--It's a stiff !
>>> parrot('a thousand',state='pushing up the daisies')
--This parrot wouldn't voom if you put a thousand volts through it.
--Lovely plumage, the Norwegian Blue
--It's pushing up the daisies !
但是以下的調用方式是錯誤的:
>>> parrot(voltage=5, 'dead')
SyntaxError: non-keyword arg after keyword arg
>>> parrot()
Traceback (most recent call last):
File "<pyshell#57>", line 1, in <mole>
parrot()
TypeError: parrot() missing 1 required positional argument: 'voltage'
>>> parrot(110, voltage=220)
Traceback (most recent call last):
File "<pyshell#58>", line 1, in <mole>
parrot(110, voltage=220)
TypeError: parrot() got multiple values for argument 'voltage'
>>> parrot(actor='John')
Traceback (most recent call last):
File "<pyshell#59>", line 1, in <mole>
parrot(actor='John')
TypeError: parrot() got an unexpected keyword argument 'actor'
>>> parrot(voltage=100,action='voom',action='voooooom')
SyntaxError: keyword argument repeated
Python的函數定義中有兩種特殊的情況,即出現*,**的形式。
*用來傳遞任意個無名字參數,這些參數會以一個元組的形式訪問
**用來傳遞任意個有名字的參數,這些參數用字典來訪問
(*name必須出現在**name之前)
>>> def cheeseshop1(kind,*arguments,**keywords):
print("--Do you have any",kind,"?")
print("--I'm sorry, we're all out of",kind)
for arg in arguments:
print(arg)
print("-"*40)
keys=sorted(keywords.keys())
for kw in keys:
print(kw,":",keywords[kw])
>>> cheeseshop1("Limbuger","It's very runny, sir.","It's really very, very runny, sir.",shopkeeper="Michael Palin",client="John",sketch="Cheese Shop Sketch")
--Do you have any Limbuger ?
--I'm sorry, we're all out of Limbuger
It's very runny, sir.
It's really very, very runny, sir.
----------------------------------------
client : John
shopkeeper : Michael Palin
sketch : Cheese Shop Sketch
>>>
3. 可變參數列表
最常用的選擇是指明一個函數可以使用任意數目的參數調用。這些參數被包裝進一個元組,在可變數目的參數前,可以有零個或多個普通的參數
通常,這些可變的參數在形參列表的最後定義,因為他們會收集傳遞給函數的所有剩下的輸入參數。任何出現在*args參數之後的形參只能是「關鍵字參數」
>>> def contact(*args,sep='/'):
return sep.join(args)
>>> contact("earth","mars","venus")
'earth/mars/venus'
4. 拆分參數列表
當參數是一個列表或元組,但函數需要分開的位置參數時,就需要拆分參數
調用函數時使用*操作符將參數從列表或元組中拆分出來
>>> list(range(3,6))
[3, 4, 5]
>>> args=[3,6]
>>> list(range(*args))
[3, 4, 5]
>>>
以此類推,字典可以使用**操作符拆分成關鍵字參數
>>> def parrot(voltage,state='a stiff',action='voom'):
print("--This parrot wouldn't", action,end=' ')
print("if you put",voltage,"volts through it.",end=' ')
print("E's", state,"!")
>>> d={"voltage":"four million","state":"bleedin' demised","action":"VOOM"}
>>> parrot(**d)
--This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !
5. Lambda
在Python中使用lambda來創建匿名函數,而用def創建的是有名稱的。
python lambda會創建一個函數對象,但不會把這個函數對象賦給一個標識符,而def則會把函數對象賦值給一個變數
python lambda它只是一個表達式,而def則是一個語句
>>> def make_incrementor(n):
return lambda x:x+n
>>> f=make_incrementor(42)
>>> f(0)
42
>>> f(2)
44
>>> g=lambda x:x*2
>>> print(g(3))
6
>>> m=lambda x,y,z:(x-y)*z
>>> print(m(3,1,2))
4
6. 文檔字元串
關於文檔字元串內容和格式的約定:
第一行應該總是關於對象用途的摘要,以大寫字母開頭,並且以句號結束
如果文檔字元串包含多行,第二行應該是空行
>>> def my_function():
"""Do nothing, but document it.
No, really, it doesn't do anything.
"""
pass
>>> print(my_function.__doc__)
Do nothing, but document it.
No, really, it doesn't do anything.
❷ Python函數註解使用有哪些注意事項呢
函數註解是關於用戶自定義的函數的完全可選的、隨意的元數據信息。
1.無論 Python 本身或者標准庫中都沒有使用函數註解;本節只是描述了語法。第三方的項目是自由地為文檔,類型檢查,以及其它用途選擇函數註解。
2.註解是以字典形式存儲在函數的 __annotations__ 屬性中,對函數的其它部分沒有任何影響。參數註解(Parameter annotations)是定義在參數名稱的冒號後面,緊隨著一個用來表示註解的值得表達式。返回注釋(Return annotations)是定義在一個 -> 後面,緊隨著一個表達式,在冒號與 -> 之間。下面的示例包含一個位置參數,一個關鍵字參數,和沒有意義的返回值注釋:
>>> def f(ham: 42, eggs: int = 'spam') -> "Nothing to see here":
... print("Annotations:", f.__annotations__)
... print("Arguments:", ham, eggs)
...
>>> f('wonderful')
Annotations: {'eggs':
, 'return': 'Nothing to see here', 'ham': 42}
Arguments: wonderful spam
❸ Python中定義函數默認參數值的使用注意事項
4.7.1. 默認參數值
最常用的一種形式是為一個或多個參數指定默認值。這會創建一個可以使用比定義是允許的參數更少的參數調用的函數,例如:
def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
while True:
ok = input(prompt)
if ok in ('y', 'ye', 'yes'):
return True
if ok in ('n', 'no', 'nop', 'nope'):
return False
retries = retries - 1
if retries < 0:
raise OSError('uncooperative user')
print(complaint)
這個函數可以通過幾種不同的方式調用:
只給出必要的參數:
ask_ok('Do you really want to quit?')
給出一個可選的參數:
ask_ok('OK to overwrite the file?', 2)
或者給出所有的參數:
ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')
這個例子還介紹了 in 關鍵字。它測定序列中是否包含某個確定的值。
默認值在函數 定義 作用域被解析,如下所示:
i = 5
def f(arg=i):
print(arg)
i = 6
f()
將會輸出 5。
重要警告: 默認值只被賦值一次。這使得當默認值是可變對象時會有所不同,比如列表、字典或者大多數類的實例。例如,下面的函數在後續調用過程中會累積(前面)傳給它的參數:
def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
這將輸出:
[1]
[1, 2]
[1, 2, 3]
如果你不想讓默認值在後續調用中累積,你可以像下面一樣定義函數:
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L
❹ Python中定義函數的使用方法
4.6. 定義函數
我們可以創建一個用來生成指定邊界的斐波那契數列的函數:
>>> def fib(n): # write Fibonacci series up to n
... """Print a Fibonacci series up to n."""
... a, b = 0, 1
... while a < n:
... print(a, end=' ')
... a, b = b, a+b
... print()
...
>>> # Now call the function we just defined:
... fib(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
關鍵字 def 引入了一個函數 定義。在其後必須跟有函數名和包括形式參數的圓括弧。函數體語句從下一行開始,必須是縮進的。
函數體的第一行語句可以是可選的字元串文本,這個字元串是函數的文檔字元串,或者稱為 docstring。(更多關於 docstrings 的信息請參考 文檔字元串) 有些工具通過 docstrings 自動生成在線的或可列印的文檔,或者讓用戶通過代碼交互瀏覽;在你的代碼中包含 docstrings 是一個好的實踐,讓它成為習慣吧。
函數 調用 會為函數局部變數生成一個新的符號表。確切的說,所有函數中的變數賦值都是將值存儲在局部符號表。變數引用首先在局部符號表中查找,然後是包含函數的局部符號表,然後是全局符號表,最後是內置名字表。因此,全局變數不能在函數中直接賦值(除非用 global 語句命名),盡管他們可以被引用。
函數引用的實際參數在函數調用時引入局部符號表,因此,實參總是 傳值調用 (這里的 值 總是一個對象 引用 ,而不是該對象的值)。[1] 一個函數被另一個函數調用時,一個新的局部符號表在調用過程中被創建。
一個函數定義會在當前符號表內引入函數名。函數名指代的值(即函數體)有一個被 Python 解釋器認定為 用戶自定義函數 的類型。 這個值可以賦予其他的名字(即變數名),然後它也可以被當作函數使用。這可以作為通用的重命名機制:
>>> fib
>>> f = fib
>>> f(100)
0 1 1 2 3 5 8 13 21 34 55 89
如果你使用過其他語言,你可能會反對說:fib 不是一個函數,而是一個方法,因為它並不返回任何值。事實上,沒有 return 語句的函數確實會返回一個值,雖然是一個相當令人厭煩的值(指 None )。這個值被稱為 None (這是一個內建名稱)。如果 None 值是唯一被書寫的值,那麼在寫的時候通常會被解釋器忽略(即不輸出任何內容)。如果你確實想看到這個值的輸出內容,請使用 print() 函數:
❺ python中函數定義
函數定義與調用:
1) >>> def 函數名(形參1,形參2): # 定義
... 函數體
函數名(實參1,實參2) #調用
❻ 在python中定義函數
涉及到狀態保存,可以使用函子(書上這么翻譯的,不曉得其他人是不是也這樣叫),給你個例子,你比對著改。如果不懂,自己再延這個方向去查看資料。
classStrip:
def__init__(self,characters):#初始化,將需要保留的狀態信息存起來
self.characters=characters
def__call__(self,string):#創建的函子被使用時,自動調用__call__
returnstring.strip(self.characters)
#下面是使用方法,兩個語句是密切銜接的。
strip_punctution=Strip(',;:.!?')#字元串參數將被__init__吃進去,並且保留在class中,
#相當於一種狀態保存的方法,在你的例子中,你可以將用戶表達式通過這種方式保存起來
strip_punctution('helloworld!')#return'helloworld',他的功能是剝離characters
#字元串中出現的字元,此處把感嘆號去掉了,
#這就是函子典型的使用方法,class中的__call__函數被自動調用,在你的
#例子中,你可以通過這樣的方式調用函數,就不用每次重新輸入表達式了。
❼ 如何定義Python函數說明
。 say_id就是對象的函數,你能夠調用它。每個對象的函數都需要一個self參數,表示[color]這個對象。 圖形界面的奧秘其實並不深奧。我相信很多人學習windows編程都是從寫一個窗口開始的,而且都是從嘗試理解那個消息和事件驅動的模型入手的。大體的過程是這樣的,窗口就是用象素畫出來的。你可以把一個窗口想像成一個窗口,也可以把窗口看成一堆象素的集合。就像有人說看女色不過是皮肉色相一樣。 而對於圖形界面的操控一般是通過滑鼠和鍵盤來完成的。滑鼠在屏幕上有一個自己的形象,那就是一個箭頭(當然你也可以調整這個圖形為其他好玩的東西,it is your freedom)。而鍵盤呢則一般表示為一個虛線的框,表示這個是鍵盤的」焦點「所在的地方。 或者是編輯框中閃動的豎杠。 Python函數這兩點中有一個共同點,就是都有一個位置來確定要操作的對象。你點下滑鼠的時候,你操作的就是滑鼠的箭頭尖端指向的那個空間,而鍵盤按下也是在其焦點所在的控制項那兒放聲。 然後就像一封信一樣從操作系統投遞到了窗口所在的應用程序。然後應用程序有一個事先注冊的」窗口過程「,其實就是一個函數,用來接收這封「信」。其實就是接收到傳過來的參數。 然後再進行一些判斷,作出一定的響應。這個就是所謂的事件驅動。在沒有冗長的代碼,和展示所有細節的情況下,如果你真的以前對這個過程一無所知,肯定會覺得非常茫然。這個一筆帶過的敘述其實只是讓你有一個感性的認識。其實在Python中使用窗口根本不用管諸葛么多。 基本上只是把自己要的窗口和控制項,給一些位置的參數,一些文字的提示內容的參數就能把窗口擺好,顯示出來。然後再通過代碼告訴Python函數 ,當「這個按鈕按下的時候執行這個函數」源碼天空 ,然後就能讓窗口有響應。 最後記得給一個退出窗口的辦法就一切OK了。其中能省的復雜度基本上都被庫給隱藏掉了。付出的代價是慢一些,但是我就不相信你能感覺出來,除非你用的電腦連vcd都看不流暢。所以大可放心的享受這種便利。
❽ 聲明變數注意事項有哪些python
聲明變數需要遵守一下規則
1、變數名的使用只能包括字母、數字和下劃線,變數名可以用字母或下劃線打頭,但不能以數字在前頭。
2、變數名不能包含有空格
3、不要將Python關鍵字和函數名作為變數名
4、變數名的命名應既簡短又具有描述性
5、變數名不能使用中文
6、遵守大、小駝峰原則