函式可變引數
#可變引數允許你傳入0個或任意個引數,這些可變引數在函式呼叫時自動組裝為乙個tuple。
defcalc
(*number):
sum = 0
for x in number:
sum = sum + x * x
return sum
#直接呼叫
print(calc(5,5,5))
#列表引數呼叫:*num表示把num這個list的所有元素作為可變引數傳進去
num = [1,2,3]
print(calc(*num))
#練習:傳入乙個或多個引數並計算引數乘積
defproduct
(x,*args):
if len(args):
sum = 1
for m in args:
sum = sum * m
return x * sum
else:
return x
函式關鍵字引數#關鍵字引數允許你傳入0個或任意個含引數名的引數,這些關鍵字引數在函式內部自動組裝為乙個dict。
defperson
(name,age,**kw):
print(name,age,'other:',kw)
#直接呼叫
person('sungang',27,***='男',job='python engineer')
#sungang 27 other:
#dist引數呼叫
#注意:**otherinfo表示把otherinfo這個dict的所有key-value用關鍵字引數傳入到函式的**kw引數,kw將獲得乙個dict,kw獲得的dict是otherinfo的乙份拷貝,對kw的改動不會影響到函式外的otherinfo
otherinfo =
person('lidysun',28,**otherinfo)
#lidysun 28 other:
命名關鍵字引數#呼叫時命名關鍵字引數必須傳入引數名,關鍵字引數之間位置不限。如果沒有傳入引數名,呼叫將報錯
defperson
(name,age,*,***,job):
print('name:%s,age:%d;***:%s,job:%s' %(name,age,***,job))
person('sg',27,job='engineer',***='male')
#如果函式定義中已經有了乙個可變引數,後面跟著的命名關鍵字引數就不再需要乙個特殊分隔符*了
defperson2
(name,age,*args,***,job):
print('name:%s,age:%d;***:%s,job:%s' %(name,age,***,job))
person2('sungang',28,***='男',job='python engineer')
#命名關鍵字引數可以設定預設值,如果有預設值,呼叫時可不傳遞該引數
defperson3
(name,age,*,wechat="sg820262236",job):
print('name:%s,age:%d;wechat:%s,job:%s' %(name,age,wechat,job))
person3('sungang',27,job='engineer')
person3('lidysun',28,wechat='1008611',job='engineer')
遞迴函式#在函式內部,可以呼叫其他函式。如果乙個函式在內部呼叫自身本身,這個函式就是遞迴函式。
#例如計算階乘n! = 1 x 2 x 3 x ... x n
deffact
(n):
if n == 1:
return n
else:
return n * fact(n-1)
print(fact(5)) #120
#使用遞迴函式需要注意防止棧溢位。在計算機中,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位。
print(fact(1000)) #報錯 recursionerror: maximum recursion depth exceeded in comparison
尾遞迴函式優化#尾遞迴是指,在函式返回的時候,呼叫自身本身,並且,return語句不能包含表示式。這樣,編譯器或者直譯器就可以把尾遞迴做優化,使遞迴本身無論呼叫多少次,都只占用乙個棧幀,不會出現棧溢位的情況。
deffact
(num):
return fact_detail(num,1)
deffact_detail
(num,product):
if num == 1:
return product
else:
return fact_detail(num-1,num * product) #函式返回的時候,呼叫自身本身,並且,return語句不能包含表示式
print(fact(5)) #120
切片#字串切片例項:字串去首尾空格
deftrim
(s):
while s[:1] == ' ':
s = s[1:]
while s[-1:] == ' ':
s = s[:-1]
return s
print(trim(' sun gang ')) #sun gang
迭代
列表迭代:
字典迭代:
#預設迭代字典的key值:
person =
for x in person:
print(x)
# name
# age
# 迭代字典的vaule值
for y in person.values():
print(y)
# sungang
# 27
#利用迭代求列表中最小最大值,返回tuple:
deffindminandmax
(l):
if len(l) == 0:
return (none,none)
if(len(l) == 1):
return (l[0],l[0])
max = min = l[0]
for x in l:
if x >= max:
max = x
if x <= min:
min = x
return (min,max)
python基礎知識總結
1 算術運算子 運算子描述例項 加10 20 30 減 10 20 10 乘 10 20 200 除 10 20 0.5 取整除 返回除法的整數部分 商 9 2 輸出結果 4 取餘數 返回除法的餘數 9 2 1 冪 又稱次方 乘方,2 3 8 2 算術運算子 運算子描述 冪 最高優先順序 乘 除 取...
Python基礎知識總結
dir builtins 可以檢視內建函式,共68個 標準資料型別 python3 中有六個標準的資料型別,其中 資料型別 數字num 注意 1 python可以同時為多個變數賦值,如a,b 1,2。2 乙個變數可以通過賦值指向不同型別的物件。3 數值的除法包含兩個運算子 返回乙個浮點數,返回乙個整...
Python基礎知識繼續總結
上一次已經安裝上pycharm了,那麼以後就用它程式設計啦。免得用互動式不能儲存,用.py檔案除錯又比較麻煩。乙個布林值只有 true 和 false 兩種值,注意大小寫。python中可以直接用 true 和 false 表示布林值,也可以進行布林計算,如下所示 python中布林值可進行 and...