轉換相關的方法-eval
轉換相關的方法-json
函數基本語法大綱
函數概念
示例:
題目:
函數的參數
def f(x,y=1,*z,**abc):print(x,y,z,abc,sep="\n")f(1,4,5,3,a=1,b=2,c=3)
#1
# 4
# (5, 3)
# {'a': 1, 'b': 2, 'c': 3}
易錯題:
1)
2)
a=1:默認參數,位置參數
*args:可變位置參數
**args:可變關鍵字參數
關鍵字參數(**args)在位置參數(*args,a=1,a)的后面
C是對的,C中兩個參數都是位置參數,前后都可以
def f(y=1,*z):pass
def f(*z,y=1):pass
函數的返回值
如果一個函數沒有返回值,它的返回就是 None。
沒有寫return,意味著沒有返回值
沒有返回類型,并且可以返回多個多個值:
示例為返回a/b的商和余數
函數調用函數
遞歸函數
練習1-求 [n, m) 之間所有整數之和
#1
#定義函數求 [n, m) 之間所有整數之和。
a= int(input("請輸入第一個數"))
b=int(input("請輸入第一個數"))
def add(n, m):count = 0for i in range(n,m - 1):count += ireturn count
print(add(a,b))
練習2-求 n 的階乘
#2
#定義函數求 n 的階乘。n=int(input("請輸入一個數"))
def factor(n):count=1for i in range(1,n+1,1):count*=ireturn count
print(factor(n))
練習3-求階乘的和
#3
#計算階乘的和。如 m = 6 ? 1!+2!+3!+4!+5!+6!。
n=int(input("請輸入一個數"))
def factor(n):count=1for i in range(1,n+1,1):count*=ireturn countdef sum1(n):sum1 = 0for i in range(1,n+1,1):sum1 += factor(i)return sum1print(sum1(n))
局部變量和全局變量
代碼示例:
查看局部和全局變量:
在python中只有函數可以分割作用域:
只有函數里面定義的才是局部變量,其他都是全局變量
函數注釋
函數注意事項
匿名函數
示例:
list1 = [{"a": 10, "b": 20}, {"a": 20, "b": 20}, {"a": 50, "b": 20}, {"a": 6, "b": 20}, {"a": 9, "b": 20}]# 那個列表中的a最大
max_value = max(list1, key=lambda x: x["a"])
print(max_value)
內置函數
內置函數 和 內置類 用到了 匿名函數
sorted(Iterable, key= None, reverse = False)
Iterable:排序規則(排序函數),在sorted內部會將可迭代對象中的每個元素傳遞給這個函數的參數.根據函數運算的結果進行排序
reverse:是否是倒序, True:倒序 False:正序 key:就可以使用匿名函數
示例:
現在有一個字典{‘小紅’:20,‘小明’:18,‘小魚’:19,‘小雪’:22,‘小東’:17},現在按照年齡排序
dict1 = {'小紅':20,'小明':18,'小魚':19,'小雪':22,'小東':17}
order_dict = sorted(dict1.items(),key=lambda s:s[1])
print(dict(order_dict))
# order_dict 是一個列表[('小東', 17), ('小明', 18), ('小魚', 19), ('小紅', 20), ('小雪', 22)],所以需要轉成字典
上面的案例中 key 就使用了匿名函數進行排序條件的制定,即 lambda 的返回值是就是排序條件,默認是升序
示例2;
# 按照數量排序
goods = [('防脫發洗發水', 60, 3), ('格子襯衫', 156, 1), ('牛仔褲', 99, 7), ('運動鞋', 299, 2)]
goods = sorted(goods, key=lambda g: g[2], reverse=True) # 設置成降序
print(goods)
語法: filter(function. Iterable)
function:用來篩選的函數,在filter中會自動的把iterable中的元素傳遞給function.然后根據function返回的Ture或者False來判斷你是否保留此項數據
iterable:可迭代對象
補充:
isinstance(object, classinfo) 判斷實例是否是這個類型
object是變量
classinfo 是類型(tuple,dict,int,float)
from functools import reducelist1 = [1, 2, 3, 4, 5, 6, 7]
value = reduce(lambda x, y: x + y, list1)
print(value) # 28 = 1+2+3+4+5+6+7
示例:
max()和min():
dict1 = {'小紅':20,'小明':18,'小魚':19,'小雪':22,'小東':17}
result = max(dict1.items(),key=lambda s:s[1])
print(result)result = min(dict1.items(),key=lambda s:s[1])
print(result)
綜合–密碼強度
# 可根據自己的思路進行擴展,完善項目的功能:
# 判斷密碼強弱:①密碼長度至少8位;②密碼含有數字;③密碼含有字母。
passw=input("the password:")num=ord('0')
#是否包含數字的函數
def IsWithNumber():#含有數字for i in range(len(passw)):if '0'<=chr(num+i)<='9':if passw.find(chr(num + i), 0, len(passw))!=-1:return Trueelse:return False
#是否包含字母的函數
alpha=ord('a')
Alpha=ord('A')
def IsWithAlpha():# 含有字母for i in range(len(passw)):if ('a' <= chr(alpha + i) <= 'z') or ('A' <= chr(alpha + i) <= 'Z'):if passw.find(chr(alpha + i), 0, len(passw)) != -1 or passw.find(chr(Alpha + i), 0, len(passw)) != -1 :return Trueelse:return False#判斷密碼強弱程度的函數
def ISStrength():if (len(passw)>=8) and IsWithNumber() and IsWithAlpha():return 1elif (len(passw)>=8) and(IsWithNumber() or IsWithAlpha()):return 2elif (len(passw)>=8) or IsWithNumber() or IsWithAlpha():return 3elif (len(passw)<8) or IsWithNumber() or IsWithAlpha():return 4#將相關判斷方法封裝成一個函數,如判斷密碼強弱程度的方法、判斷是否包含數字的方法、判斷是否包含字母的方法。
def Set():count = 3while count > 0:IsWithNumber()IsWithAlpha()ISStrength()if ISStrength() == 1 and IsWithNumber() and IsWithNumber():print('the password is quality')qurey = input('Are you sure ?[Y/N] :')if qurey == 'Y':global passwprint('the setting is ok')print('your password:' + passw)return Trueelif qurey == 'N':passw = input('input the new password:')count -= 1else:print('the password is not quality')passw = input('input the new password:')count -= 1print('end setting')
Set()