通過關(guān)鍵字def來創(chuàng)建函數(shù),def的作用是實(shí)現(xiàn)python中函數(shù)的創(chuàng)建
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),桂林企業(yè)網(wǎng)站建設(shè),桂林品牌網(wǎng)站建設(shè),網(wǎng)站定制,桂林網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,桂林網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
函數(shù)定義過程:
函數(shù)名+()小括號(hào)執(zhí)行函數(shù)
函數(shù)體內(nèi)對(duì)全局變量只能讀取,不能修改
局部變量,無法在函數(shù)體外使用
python 使用 lambda 來創(chuàng)建匿名函數(shù)。
所謂匿名,意即不再使用 def 語句這樣標(biāo)準(zhǔn)的形式定義一個(gè)函數(shù)。
使用關(guān)鍵詞 def 聲明這是一個(gè)函數(shù)
1def 函數(shù)名 (參數(shù)):
2 語句塊
參數(shù)可以沒有,也可以有多個(gè),用逗號(hào)隔開,第一行稱為函數(shù)頭,結(jié)尾一定要加冒號(hào),代表開始進(jìn)入函數(shù)體的執(zhí)行。
語句塊也就是函數(shù)體,是關(guān)于這個(gè)函數(shù)要實(shí)現(xiàn)的功能的語句,語句要有返回值即return語句,如果沒有return語句,就代表return none.
定義函數(shù)需要注意的幾個(gè)事項(xiàng):
1、def開頭,代表定義函數(shù)
2、def和函數(shù)名中間要敲一個(gè)空格
3、之后是函數(shù)名,這個(gè)名字用戶自己起的,方便自己使用就好
4、函數(shù)名后跟圓括號(hào)(),代表定義的是函數(shù),里邊可加參數(shù)
5、圓括號(hào)()后一定要加冒號(hào): 這個(gè)很重要,不要忘記了
6、代碼塊部分,是由語句組成,要有縮進(jìn)
7、函數(shù)要有返回值return
下面是幾個(gè)例子:
1 #python中的函數(shù)定義,使用和傳參
2 def_str = '''\
3 python中的函數(shù)以如下形式聲明:
4
5 def 函數(shù)名稱([參數(shù)1,參數(shù)2,參數(shù)3......]):
6 執(zhí)行語句
7
8 如:
9
10 def helloWorld():
11 print('hello')
12
13 if __name__ == '_main__':
14 helloWorld()
15
16 輸出:hello
17 '''
18 print(def_str)
19
20 #下面進(jìn)行舉例說明
21
22 def helloWorld():
23 print('輸出:hello')
24
25 if __name__ == '__main__':
26 helloWorld()
27
28 print('''\
29 ################################################
30
31 函數(shù)可以帶參數(shù)和返回值,參數(shù)將按從左到右的匹配,
32 參數(shù)可設(shè)置默認(rèn)值,當(dāng)使用函數(shù)時(shí)沒給相應(yīng)的參數(shù)時(shí),
33 會(huì)按照默認(rèn)值進(jìn)行賦值
34
35 ################################################
36 ''')
37
38 #定義一個(gè)方法:x的y次方
39 def myMethod(x,y):
40 return x**y
41
42 def fib(n):
43 a , b = 0 , 1
44 while a n:
45 print(a, end=' ')
46 a , b = b , a + b
47 print()
48
49 #獲取一個(gè)新的數(shù)組
50 #@param oldList 原數(shù)組
51 #@param length 要添加的長度
52 def getList(oldList,length):
53 if length 0:
54 for i in range(0,length):
55 oldList.append(i)
56 return oldList
57 else:
58 return '你輸入的長度小于0'
59
60 def ask_ok(prompt, retries=4, complaint='Yes or no, please!'):
61 while True:
62 ok = input(prompt)
63 if ok in ('y', 'ye', 'yes'):
64 return True
65 if ok in ('n', 'no', 'nop', 'nope'):
66 return False
67 retries = retries - 1
68 if retries 0:
69 raise IOError('refusenik user')
70 print(complaint)
71
72 if __name__ == '__main__':
73 x = 3
74 y = 4
75 n = 2000
76 print(x , '的' , y , '次方(' ,x ,'**' , y ,') = ' , myMethod(x,y))
77 print('函數(shù)fib(n),當(dāng)n =' ,n)
78 fib(n)
79 print(getList(['begin'],-10))
80 ask_ok('y')
運(yùn)行效果:
Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
================================ RESTART ================================
python中的函數(shù)以如下形式聲明:
def 函數(shù)名稱([參數(shù)1,參數(shù)2,參數(shù)3......]):
執(zhí)行語句
如:
def helloWorld():
print('hello')
if __name__ == '_main__':
helloWorld()
輸出:hello
輸出:hello
################################################
函數(shù)可以帶參數(shù)和返回值,參數(shù)將按從左到右的匹配,
參數(shù)可設(shè)置默認(rèn)值,當(dāng)使用函數(shù)時(shí)沒給相應(yīng)的參數(shù)時(shí),
會(huì)按照默認(rèn)值進(jìn)行賦值
################################################
3 的 4 次方( 3 ** 4 ) = 81
函數(shù)fib(n),當(dāng)n = 2000
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
你輸入的長度小于0
y輸出:hello
Yes or no, please!
y
Yes or no, please!
y
Yes or no, please!
y
Yes or no, please!
y
Traceback (most recent call last):
File "E:/Python33/python_workspace/test_function.py", line 80, in module
ask_ok('y')
File "E:/Python33/python_workspace/test_function.py", line 69, in ask_ok
raise IOError('refusenik user')
OSError: refusenik user
python中def意思是聲明函數(shù)。
Python 使用def 開始函數(shù)定義,緊接著是函數(shù)名,括號(hào)內(nèi)部為函數(shù)的參數(shù),內(nèi)部為函數(shù)的 具體功能實(shí)現(xiàn)代碼,如果想要函數(shù)有返回值, 在?expressions 中的邏輯代碼中用 return 返回。
expressions
實(shí)例def function():
print('This is a function')
a = 1+2
print(a)
相關(guān)內(nèi)容:
function 的函數(shù),函數(shù)沒有不接受參數(shù),所以括號(hào)內(nèi)部為空,緊接著就是 函數(shù)的功能代碼。如果執(zhí)行該腳本,發(fā)現(xiàn)并沒有輸出任何輸出,因?yàn)槲覀冎欢x了函數(shù),而并沒有執(zhí)行函數(shù)。 這時(shí)我們在 Python 命令提示符中輸入函數(shù)調(diào)用 function(), 注意這里調(diào)用函數(shù)的括號(hào)不能省略。
那么函數(shù)內(nèi)部的功能代碼將會(huì)執(zhí)行,輸出結(jié)果:This is a function。
parameter 是函數(shù)定義的參數(shù)形式
argument 是函數(shù)調(diào)用時(shí)傳入的參數(shù)實(shí)體。
對(duì)于函數(shù)調(diào)用的傳參模式,一般有兩種:
此外,
也是關(guān)鍵字傳參
python的函數(shù)參數(shù)定義一般來說有五種: 位置和關(guān)鍵字參數(shù)混合 , 僅位置參數(shù) , 僅關(guān)鍵字參數(shù) , 可變位置參數(shù) , 可變關(guān)鍵字參數(shù) 。其中僅位置參數(shù)的方式僅僅是一個(gè)概念,python語法中暫時(shí)沒有這樣的設(shè)計(jì)。
通常我們見到的函數(shù)是位置和關(guān)鍵字混合的方式。
既可以用關(guān)鍵字又可以用位置調(diào)用
或
這種方式的定義只能使用關(guān)鍵字傳參的模式
f(*some_list) 與 f(arg1, arg2, ...) (其中some_list = [arg1, arg2, ...])是等價(jià)的
網(wǎng)絡(luò)模塊request的request方法的設(shè)計(jì)
多數(shù)的可選參數(shù)被設(shè)計(jì)成可變關(guān)鍵字參數(shù)
有多種方法能夠?yàn)楹瘮?shù)定義輸出:
非常晦澀
如果使用可變對(duì)象作為函數(shù)的默認(rèn)參數(shù),會(huì)導(dǎo)致默認(rèn)參數(shù)在所有的函數(shù)調(diào)用中被共享。
例子1:
addItem方法的data設(shè)計(jì)了一個(gè)默認(rèn)參數(shù),使用不當(dāng)會(huì)造成默認(rèn)參數(shù)被共享。
python里面,函數(shù)的默認(rèn)參數(shù)被存在__default__屬性中,這是一個(gè)元組類型
例子2:
在例子1中,默認(rèn)參數(shù)是一個(gè)列表,它是mutable的數(shù)據(jù)類型,當(dāng)它寫進(jìn) __defauts__屬性中時(shí),函數(shù)addItem的操作并不會(huì)改變它的id,相當(dāng)于 __defauts__只是保存了data的引用,對(duì)于它的內(nèi)存數(shù)據(jù)并不關(guān)心,每次調(diào)用addItem,都可以修改 addItem.__defauts__中的數(shù)據(jù),它是一個(gè)共享數(shù)據(jù)。
如果默認(rèn)參數(shù)是一個(gè)imutable類型,情況將會(huì)不一樣,你無法改變默認(rèn)參數(shù)第一次存入的值。
例子1中,連續(xù)調(diào)用addItem('world') 的結(jié)果會(huì)是
而不是期望的
params
就是(5, 5)
(5,) * 2 ,就是2個(gè)5的元組,乘號(hào)可以理解成相加。"*" * 30就是30個(gè)“*"的字符串
*params作為參數(shù),前面的*號(hào)就是把params元組分解成元素的意思,這樣就分開成為2個(gè)參數(shù)了。實(shí)際上傳遞給了x,y
于是就執(zhí)行了power(5,5)
定義:
def 函數(shù)名(形參1,形參2='初始定義的內(nèi)容'):
函數(shù)中執(zhí)行的內(nèi)容
調(diào)用:
函數(shù)名(實(shí)參1)或函數(shù)名(形參2=實(shí)參2,形參1=實(shí)參1)或函數(shù)名(實(shí)參1,實(shí)參2)