def
student_name
(name)
:# 函式冒號起始,下面縮排代表以下都是該函式的內容
"列印學生的名字"
# 相當於函式的注釋,解釋函式的功能
print
('姓名:'
, name)
return
返回多個值。
def
student_name_and_age()
: name =
input
('請輸入姓名\n'
) age =
int(
input
('請輸入年齡\n'))
return name,age
rst = student_name_and_age(
)# 預設返回乙個tuple
name, age = student_name_and_age(
)# 將tuple的值拆分,依次返回至每乙個變數
函式的巢狀呼叫
def
worker
(s):
rst =10/
float
(s)return rst
defgroup_leader
(s):
rst = worker(s)*2
return rst
defcto
(s):
return group_leader(s)
位置引數
位置引數是最簡單的一種函式呼叫的方式。位置引數須以正確的順序傳入函式,數量必須和宣告時的一樣。
def
student_name_and_age
(name, age):.
..student_name_and_age(
'葉鍇',24
)
預設引數
呼叫函式時,預設引數的值如果沒有傳入,則被認為是預設值。
def
student_name_and_age
(name, age=
'不願透露'):
...student_name_and_age(
'葉鍇'
)student_name_and_age(
'趙一默',25
)
可變引數
傳入的引數個數是可變的,可以是1個、2個到任意個,還可以是0個,這些可變引數在函式呼叫時自動組裝為乙個tuple。
def
all_student_names
(*names):.
..all_student_names(
'葉鍇'
,'趙一默'
,'李默'
)
關鍵字引數
允許傳入0個或任意個含引數名的引數,這些關鍵字引數在函式內部自動組裝為乙個dict。
def
student_info
(name, age,
**kw)
:print
(f'我的名字叫:,年齡:,其他資訊:')if
'city'
in kw:
print
(',來自:'
, kw[
'city'])
student_info(
'葉鍇',24
, height=
187, city=
'北京'
)
def
score_info
(name,
**kw):if
'語文成績'
in kw:
print
(name,
'的語文成績:'
, kw[
'語文'])
if'數學成績'
in kw:
print
(name,
'的數學成績:'
, kw[
'數學'])
defperson_info
(name, age,
**kw)
:print
('姓名:'
, name,
',年齡'
, age)
score_info(name,
**kw)
score_cfg =
person_info(
'葉鍇',19
,**score_cfg)
命名關鍵字引數
如果要限制關鍵字引數的名字,可以用命名關鍵字引數。
def
print_person_info
(name, age,
*, height, weight)
:# *號後的引數都叫命名關鍵字引數
print(.
..)print_person_info(
'葉鍇',19
, height=
187, weight=
62.5
)# 命名關鍵字引數呼叫時必須寫清引數名
在定義函式時,可以組合使用以上5種引數。但是,引數定義的順序必須是:必選引數、預設引數、可變引數、命名關鍵字引數和關鍵字引數。
注意:最好不要同時組合太多。
def
student_info
(name, age=18,
*books, city,
**kw)
:# 如果函式定義中已經有了乙個可變引數,後面跟著的命名關鍵字引數就不再需要乙個特殊分隔符*了..
.student_info(
'葉鍇',19
,'高數'
,'線代'
,'英語'
, city=
'北京'
, height=
187, weight=
63)
區域性變數作用域:在函式內
全域性變數作用域:在函式外
函式優先使用區域性變數,在沒有區域性變數的情況下,使用全域性變數。
注意:定義在函式內部的變數,函式結束之後自動消亡。
def
change_my_name()
:global name # 當函式中對外面的某一變數賦值時,預設這個變數為區域性變數。因此,在賦值前想呼叫該變數時,需定義global變數,才能呼叫該變數在外面定義的值
print
('我的名字曾經是'
, name)
name =
'葉鍇'
print
('我的名字現在是'
, name)
name =
'葉君'
change_my_name(
)
lambda的主體是乙個表示式,而不是乙個**塊,僅僅能在lambda表示式中封裝有限的邏輯進去。
lambda函式擁有自己的命名空間,且不能訪問自有引數列表之外或全域性命名空間裡的引數。
# lambda 若干個輸入引數 : 返回值的表示式
(lambda arg1, arg2: arg1 + arg2)(1
,2)add =
lambda arg1, arg2: arg1 + arg2
add(1,
2)
# 函式名其實就說指向函式的變數
my_print =
print
my_print(
'a')
# 函式名也可以作為乙個變數,傳入其他函式
deffunc_x
(x, f)
:return f(x)
func_x(-1
,abs
)# abs為絕對值函式
乙個函式可以接收另乙個函式作為引數,這種函式就稱之為高階函式。
mapmap()函式接受兩個引數,乙個是函式,乙個是iterable(可迭代物件)。map將傳入的函式依次作用到序列的每個元素,並把結果作為新的iterator返回。
reduce
用傳給reduce中的函式function(兩個引數)先對集合中的第1、2個元素進行操作,得到的結果再與第三個資料用function函式運算,依此類推,最後得到乙個結果。
sorted
預設按照公升序排序,當宣告reverse=true時降序排序。
閉包閉包從表現形式上定義為:如果在乙個內部函式裡,對在外部作用域(但不是在全域性作用域)的變數進行引用,那麼內部函式就被認為是閉包(closure)。
注意:返回閉包時,返回函式不要引用任何迴圈變數,或後續會發生變化的變數。
裝飾器用來「裝飾」python的用具,使得**更具有python簡潔的風格。換句話說,它是一種函式的函式,因為裝飾器傳入的引數就說乙個函式,然後通過實現各種功能來對這個函式的功能進行增強。
# 裝飾器輸入乙個函式,輸出乙個函式
defprint_working
(func)
:def()
:print
(f' is working...'
) func(
)
裝飾器最大的優勢是用於解決重複性的操作,其主要使用的場景如下:
偏函式通過設定引數的預設值,降低函式呼叫的難度。
python 函式 課堂筆記 12 21
python 函式 函式是組織好的,可重複使用的,用來實現單一,或相關功能的 報 語法 def 函式名 引數列表 引數體return 可以返回多個值,返回的多個值組成乙個元組,返回值加上一對中括號,則返回乙個列表 函式分為定義和呼叫 可更改 mutable 與不可更改 immutable 物件 在p...
課堂筆記08 函式
函式也是 個物件 函式 來儲存 些可執 的 並且可以在需要時,對這些語句進 多次 調 語法 def 函式名 形參1,形參2,形參3.塊注意 函式名必須符合識別符號的規範 可以包含字 數字 下劃線但是不能以數字開 頭 print是函式物件 print 是調 函式 定義乙個函式 函式中儲存的 不會立即執...
課堂筆記09 函式2
返回值就是函式執 以後返回的結果 通過return來指定函式的返回值 return後 可以跟任意物件,返回值甚 可以是 個函式 help 是python中內建函式,通過help 函式可以查詢python中函式的 法 在定義函式時,可以在函式內部編寫 檔字串,檔字串就是對函式的 說明 作 域 scop...