員工考勤打卡時,如何避免非本人代替打卡?
1120
2025-04-01
函數
函數就是將一段具有獨立功能的代碼塊整合到一個整體并命名,在需要的位置==調用這個名稱==即可完成對應的需求。
函數在開發過程中,可以更高效的實現代碼重用。
函數的作用:封裝代碼,高效的代碼重用
函數使用步驟
定義函數
def 函數名(): 代碼1 代碼2 ...
函數名()
函數的參數:函數調用的時候可以傳入真實數據,增大函數的使用的靈活性
形參:函數定義時書寫的參數(非真實數據)
實參:函數調用時書寫的參數(真實數據)
函數的返回值
作用:函數調用后,返回需要的計算結果
寫法
return 表達式
函數的說明文檔
作用:保存函數解釋說明的信息
寫法
def 函數名(): """ 函數說明文檔 """
函數嵌套調用:一個函數內部嵌套調用另外一個函數
函數定義
定義函數
def 函數名(參數): 代碼1 代碼2 ......
函數名(參數)
注意:
1. 不同的需求,參數可有可無。 2. 在Python中,函數必須==先定義后使用==。
具體例子
使用函數,完成加法
def sum_num(a, b): return a + b # 用result變量保存函數返回值 result = sum_num(1, 2) print(result)
3
函數說明文檔
對于python當中許多內置的函數,可以使用help()來獲得函數的具體使用方法
當然大家在平時寫函數的過程中,為了便于其他人員的使用,增加可讀性,也可以適當寫函數說明文檔
定義函數的說明文檔
def 函數名(參數): """ 說明文檔的位置 """ 代碼 ......
查看函數的說明文檔
help(函數名)
help(print)
Help on built-in function print in module builtins: print(...) print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) Prints the values to a stream, or to sys.stdout by default. Optional keyword arguments: file: a file-like object (stream); defaults to the current sys.stdout. sep: string inserted between values, default a space. end: string appended after the last value, default a newline. flush: whether to forcibly flush the stream.
使用help(函數名)就可以很容易看到print()當中的參數了
def sum_num(a, b): """ 求和函數 """ return a + b help(sum_num)
Help on function sum_num in module __main__: sum_num(a, b) 求和函數
嵌套使用
同時在python中函數也可以嵌套使用的
def testB(): print('---- testB start----') print('這里是testB函數執行的代碼...(省略)...') print('---- testB end----') def testA(): print('---- testA start----') testB() print('---- testA end----') testA()
---- testA start---- ---- testB start---- 這里是testB函數執行的代碼...(省略)... ---- testB end---- ---- testA end----
如果函數A中,調用了另外一個函數B,那么先把函數B中的任務都執行完畢之后才會回到上次 函數A執行的位置。
變量作用域
變量作用域指的是變量生效的范圍,主要分為兩類:==局部變量==和==全局變量==。
局部變量
所謂局部變量是定義在函數體內部的變量,即只在函數體內部生效。
def testA(): a = 100 print(a) testA() # 100 print(a) # 報錯:name 'a' is not defined
變量a是定義在testA函數內部的變量,在函數外部訪問則立即報錯。
局部變量的作用:在函數體內部,臨時保存數據,即當函數調用完成后,則銷毀局部變量。
全局變量
所謂全局變量,指的是在函數體內、外都能生效的變量。
思考:如果有一個數據,在函數A和函數B中都要使用,該怎么辦?
答:將這個數據存儲在一個全局變量里面。
a = 100 # 定義全局變量a def testA(): print(a) # 訪問全局變量a,并打印變量a存儲的數據 def testB(): print(a) # 訪問全局變量a,并打印變量a存儲的數據 testA() # 100 testB() # 100
global 關鍵字聲明a是全局變量
a = 100 # 定義全局變量a def testA(): print(a) def testB(): global a a = 200 print(a) testA() testB()
100 200
函數的返回值、參數
返回值
思考:如果一個函數如些兩個return (如下所示),程序如何執行?
def return_num(): return 1 return 2 result = return_num() print(result) # 1
答:只執行了第一個return,原因是因為return可以退出當前函數,導致return下方的代碼不執行。
思考:如果一個函數要有多個返回值,該如何書寫代碼?
def return_num(): return 1, 2 result = return_num() print(result) # (1, 2)
注意:
return a, b寫法,返回多個數據的時候,默認是元組類型。
return后面可以連接列表、元組或字典,以返回多個值。
def return_num(): return (10, 20) return_num()
(10, 20)
位置參數
位置參數:調用函數時根據函數定義的參數位置來傳遞參數。
注意:傳遞和定義參數的順序及個數必須一致。
def user_info(name, age, gender): print(f'您的名字是{name}, 年齡是{age}, 性別是{gender}') user_info('北山啦', 20, '男')
您的名字是北山啦, 年齡是20, 性別是男
關鍵字參數
函數調用,通過“鍵=值”形式加以指定??梢宰尯瘮蹈忧逦?、容易使用,同時也清除了參數的順序需求。
def user_info(name, age, gender): print(f'您的名字是{name}, 年齡是{age}, 性別是{gender}') user_info('Rose', age=20, gender='女') user_info('小明', gender='男', age=16)
您的名字是Rose, 年齡是20, 性別是女 您的名字是小明, 年齡是16, 性別是男
注意:函數調用時,如果有位置參數時,位置參數必須在關鍵字參數的前面,但關鍵字參數之間不存在先后順序。
user_info(gender='男', age=16, '小明')
File "C:\Users\ADMINI~1\AppData\Local\Temp/ipykernel_13808/292338224.py", line 1 user_info(gender='男', age=16,'小明') ^ SyntaxError: positional argument follows keyword argument
缺省參數
缺省參數也叫默認參數,用于定義函數,為參數提供默認值,調用函數時可不傳該默認參數的值(注意:所有位置參數必須出現在默認參數前,包括函數定義和調用)。
注意:函數調用時,如果為缺省參數傳值則修改默認參數值;否則使用這個默認值。
def user_info(name, age, gender='男'): print(f'您的名字是{name}, 年齡是{age}, 性別是{gender}') user_info('TOM', 20) user_info('Rose', 18, '女')
您的名字是TOM, 年齡是20, 性別是男 您的名字是Rose, 年齡是18, 性別是女
不定長參數
不定長參數也叫可變參數。用于不確定調用的時候會傳遞多少個參數(不傳參也可以)的場景。此時,可用包裹(packing)位置參數,或者包裹關鍵字參數,來進行參數傳遞,會顯得非常方便。
包裹位置傳遞
def user_info(*args):#*必須寫,args可以為其他的 print(args) # ('TOM',) user_info('TOM') # ('TOM', 18) user_info('TOM', 18)
注意:傳進的所有參數都會被args變量收集,它會根據傳進參數的位置合并為一個元組(tuple),args是元組類型,這就是包裹位置傳遞。
包裹關鍵字傳遞
def user_info(**kwargs): print(kwargs) # {'name': 'TOM', 'age': 18, 'id': 110} user_info(name='TOM', age=18, id=110)
綜上:無論是包裹位置傳遞還是包裹關鍵字傳遞,都是一個組包的過程。
拆包
拆包:元組
拆包:字典
def return_num(): return 100, 200 num1, num2 = return_num() print(num1) print(num2)
100 200
dict1 = {'name': 'beishanla', 'age': 20} a, b = dict1 print(a) print(b)
name age
for i in dict1.keys(): print(i)
name age
lambda表達式
lambda 參數列表 : 表達式
lambda表達式的參數可有可無,函數的參數在lambda表達式中完全適用。
lambda表達式能接收任何數量的參數但只能返回一個表達式的值。
遞歸
def sum_number(num): if num == 1: return 1 return num + sum_number(num-1) sum_number(3)
lambda表達式的簡單例子
def f1(a, b): return a + b print(f1(1, 2))
3
def f2(a, b): return a if a > b else b print(f2(1000, 500))
1000
列表數據按字典key的值排序
infos = [ {'name': 'beishanla', 'age': 20}, {'name': 'zhagnzk', 'age': 21}, {'name': 'zhangy', 'age': 22}, ] infos.sort(key=lambda x: x['name'], reverse=True) print(infos)
[{'name': 'zhangy', 'age': 22}, {'name': 'zhagnzk', 'age': 21}, {'name': 'beishanla', 'age': 20}]
map、filter、reduce
map:
map(func, lst),將傳入的函數變量func作用到lst變量的每個元素中,并將結果組成新的列表(Python2)/迭代器(Python3)返回。
square = list(map(lambda x: x**2, range(10))) print(square)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
square = [x**2 for x in range(10)] print(square)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
filter:filter(func, lst)函數用于過濾序列, 過濾掉不符合條件的元素, 返回一個 filter 對象。如果要轉換為列表, 可以使用 list() 來轉換。
result = list(filter(lambda x: x % 2 == 0, range(10))) result
[0, 2, 4, 6, 8]
reduce:reduce(func,lst),其中func必須有兩個參數。每次func計算的結果繼續和序列的下一個元素做累積計算。
注意:reduce()傳入的參數func必須接收2個參數。
import functools list1 = [1, 2, 3, 4, 5] def func(a, b): return a + b result = functools.reduce(func, list1) print(result) # 15
15
文件操作
文件操作步驟
打開
文件對象 = open(目標文件, 訪問模式) with open(目標文件,訪問模式):
操作
讀
文件對象.read() 文件對象.readlines() 文件對象.readline()
寫
文件對象.write()
seek()
關閉
文件對象.close()
主訪問模式
w:寫,文件不存在則新建該文件
r:讀,文件不存在則報錯
a:追加
文件和文件夾操作
重命名:os.rename()
獲取當前目錄:os.getcwd()
獲取目錄列表:os.listdir()
Python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。