·函數的參數
··參數
1、形式參數:parameter--形式參數
創建函數時,小括號內的參數
2、實際參數:argument--實參
函數調用時,小括號內傳遞進去的參數
··函數文檔
1、直接書寫字符串
2、用#標記單行的註釋
3、可以用print(‘內容’)直接輸出內容
#-- coding: utf-8 --
#這個函數求兩個數值之和
def add(num1,num2):
'把num1和num2 的和進行返回'#這行字符串是一個註釋
print ('求兩個值的和')
return num1+num2
print add(1,2)
函數文檔的讀取:
1、函數名.doc 兩個下劃線 屬性名 doc裏面存儲文本與註釋
int.doc
2.help(函數名)
help(str)
··關鍵字參數
定義了關鍵字的參數
1、位置參數:
直接給參數(和位置有關--一一對應)
2、關鍵字參數
def myFunction(num1,num2):
print num1,num2
myFunction(num2='world',num1='hello')
1、位置參數與關鍵字參數混用的時候,位置參數必須在關鍵字
參數的前面
def myFunction(a,b,c):
print a,b,c
myFunction(a='hello','world','python')
返回錯誤
2、不要給同一個形參多次賦值
def myFunction(a,b,c):
print a,b,c
myFunction(a='hello',b='world',b='python')
返回錯誤
···默認參數
是定義了默認值的參數
def myFunction(a='hello',b='world'):
print a,b
myFunction('hhe','dsb')
返回hehe das
1、默認參數與位置參數混用的時候,位置參數必須在默認參數之前,位置參數要前面放
def myFunction(a='hello',b='world'):
print a,b
myFunction(,'dsb')
返回錯誤
2、默認參數只能在函數定義階段賦值一次(僅僅一次)
def myFunction(a='hello',b='world'):
print a,b
myFunction()
關鍵字參數在函數調用時候定義,默認參數在函數定義的時候賦值。
····可變長參數(收集參數)
1、在參數前面加上*
將所有參數打包元祖,進行輸出
def fun(*a):
print a
fun('hehe','hello')
2、在參數上面加**
將所有參數打包成字典
·······命名關鍵字參數
可變長參數後面的參數應該使用命名關鍵字參數
def fun(*a,b):
print a
fun('hehe','hello',b='world')
def fun(b,*a):
print a
fun('hehe','hello','world')
1、可變長參數必須在位置參數後
print函數的參數就是可變長參數,輸出元祖
API文檔如何查看 help 或者F1
函數和過程
函數 function
過程 procedure
python 只有函數 ,沒有過程
····返回值
即便沒有在函數中寫return語句,函數也會返回一個結果,這個結果爲None,爲空數據類型。
如果要返回多個值,可以直接書寫,多個值之間用逗號隔開,返回值爲一個元祖。
···函數變量的作用域
變量有作用域(變量的可見性)
1、局部變量:local variable
1、定義在函數內部的變量
2、先賦值,後使用
3、作用範圍從定義開始到包含代碼塊結束
2、全局變量 global variable
1、定義在函數的外部
2、先賦值後使用
3、作用範圍:整個文件,可以被多個函數調用
4、如果局部變量與全局變量發生衝突,以局部變量爲準
def fun1(para1):
print para1
def fun2(para1):
print para1
a=10
def fun3(para1):
a=20
print para1
fun1(a)
fun2(a)
fun3(a)
在函數內部訪問全局變量的時候,在函數內部創建一個相同的局部變量,原來局部變量不變
a=10
def fun3():
a=20
print a
fun3()
print a
3、global 全局變量
a=10
def fun3():
global a
a=20
print a
fun3()
print a
結果返回兩個20
定義全局變量(如果在函數中修改global定義的變量,全局變量跟着改變)
·內嵌函數
定義在函數內部的函數:內嵌函數(內部函數)
內部函數的整個作用域,都在外部函數之內(從定義開始到包含它的代碼塊結束)
1、外部函數的局部變量與內部函數的局部變量發生命名衝突,以內部函數的局部變量優先
2.外部函數不能訪問內部函數的局部變量
3.在內部函數中訪問外部函數的局部變量時,不能進行a+=1,這樣的操作,原因就是a+1中的局部變量a沒有賦值。
#lambda表達式
python 允許使用lambda表達式創建匿名函數
···匿名函數
沒有函數名的函數:
lambda表達式:
1、關鍵字:lambda
2、創建形式:lambda函數的參數:函數的實現
3、lambda語句構建了一個函數對象,返回一個函數對象的信息,只需要賦值
fun=lambda a:a+1
print fun(3)
4、如果傳入多個參數
fun=lambda a,b,c:a+b+c
print fun(2,3,4,)
··作用
1、只需要使用一次,更加精簡,不要單獨創建函數
2、簡化代碼,提高代碼的可讀性
函數的嵌套與遞歸
··函數的嵌套:在一個函數中調用其他函數
解一元二次方程
ax^2+bx+c=0
x=frac{-b\pm{\sqrt{b^2-4ac}}}{2a}
def jieFangCheng(a,b,c):
#先判斷方程有沒有解
if qiuJie(a,b,c):#判斷qiuJie()返回的真還是假
#繼續解方程求出所有的解
delta = b*b-4*a*c
x1=(-b+delta**0.5)/2*a
x2=(-b-delta**0.5)/2*a
print x1,x2
else:
print '無解'
def qiuJie(a,b,c):
delta=b*b-4*a*c
if delta>=0:
return True
else:
return False
jieFangCheng(1,1,1)
jieFangCheng(1,1,-1)
··遞歸
遞歸:自己調用自己
def factorial(n):
if n==1:
return 1
return n*factorial(n-1)
print(factorial(4))
注意:防止無窮遞歸 與循環不同
漢諾塔
def han(a,b,c,n):
if n==1:
print a+'---'+b
else:
han(a,c,b,(n-1))
print a+'----'+b
han(c,b,a,(n-1))
han('A','B','C',3)