1 為什麼要有函式?沒有函式帶來的困擾?函式型別與變數組織結構不清晰,可讀性差
**冗餘
可擴充套件性差
2 什麼是函式
具備某乙個功能的工具—>函式
事先準備工具—>函式的定義
拿來就用、重複使用—>函式的呼叫
ps:先定義後呼叫
3 函式的分類:
內建函式:len,max(10,11),help(函式名)
自定義函式:def
語法:
def 函式名(引數1,引數2,...):
"""注釋"""
函式體return 返回值
def
print_tag
(): print('*'*20)
print_tag()
print(print_tag) #列印變數print_tag對應的記憶體位址
定義函式階段,只檢測語法,不執行**
定義階段:
def
bar():
#定義乙個函式名字為bar
print('from bar')
呼叫階段:bar() #呼叫函式
函式的使用:先定義後呼叫def
bar():
print('from bar')
deffoo
(): print('from foo')
bar() #先定義後呼叫
foo() #foo函式呼叫bar函式
定義函式的三種形式
第一種:無參函式
def
auth
():#無參函式
name=input('name>>>').strip()
password=input('password>>>').strip()
if name == 'lqx'
and password == '123':
print('login successfull')
else:
print('login err')
auth()
第二種:有參函式def
auth
(name,password):
if name == 'lqx'
and password == '123':
print('login successfull')
else:
print('login err')
definteractive
(): name=input('name>>>').strip()
password=input('password>>>').strip()
auth(name,password) #引數傳入auth中
interactive()
第三種:空函式def
auth
():pass
defput
():pass
defget
():pass
defls
():pass
函式的返回值
return的特點
1、函式內可以有多個return,但是只能執行一次return2、執行return函式就立刻結束,並且return的後值當做本次呼叫的結果返回
def
foo():
print('first')
return
1 print('second')
return
2 print('third')
return
3foo()
返回的值沒有型別限制def
bar():
print('from bar')
deffoo
():return bar #返回bar
print(foo() is bar)
a=foo()
a() #這裡的a()就是bar()函式
返回值的個數1、沒有return:預設返回none2、return值:值本身
3、return多個值:返回乙個元組
def
foo():
pass
return
1,'a',[1,2],
a=foo()
print(a)
函式呼叫的三種形式def
my_max
(x,y):
if x >= y:
return x
else:
return y
res1=my_max(1,2)
res2=my_max(1,2)*10
res3=my_max(my_max(1,2),3)
print(res1,res2,res3)
函式的引數分類兩種形參:在定義階段括號內指定的引數,相當於變數名實參:在呼叫階段括號內傳入的值稱為實參,相當於值
在呼叫階段,實參的值會繫結給形參,在呼叫結束後解除繫結
def
foo(x,y):
#x=1,y=2
print(x,y)
foo(1,2)
在python中引數的分類
位置引數:按照從左到右的順序依次定義的引數
位置形參:必須被傳值,多乙個少乙個都不行位置實參:與形參一一對應傳值
def
foo(x,y):
print(x,y)
foo(2,1)
關鍵字引數:在函式呼叫時,按照key=value的形式定義的實參特點:指名道姓地給形參傳值,不在依賴與位置注意:
1、關鍵字實參必須在位置實參的後面
2、不能為同乙個引數賦值多次
def
foo(name,age,***):
print(name,age,***)
foo('lqx',18,'male')
foo(name='lqx',age=18,***='male')
預設引數:在函式定義階段,就已經為形參賦值了特點:定義階段已經有值意味著呼叫階段可以不用傳值位置引數通常用於經常變化的引數,而預設引數指的是大多數情況下都一樣的
注意:
1、預設引數必須放到位置形參的後面
2、預設引數的值只在定義時被賦值一次
3、預設的引數的值通常應該是不可變型別(str,int,tuple)
def
register
(name,age,***='male'):
print(name,age,***)
register('egon1',18) #位置實參,傳參
register('egon2',18) #關鍵字實參,傳參
register('egon3',18) #位置實參,預設引數,傳參
register('alex',38,'female') #關鍵字實參,預設引數,傳參
可變長引數:在呼叫函式時,實參值的個數不固定
*args的用法:(多餘的值以元組的形式保留)
# *args的用法:
deffoo
(x,y,*args):
#args=(4,5,6,7)
print(x,y)
print(args)
foo(1,2,4,5,6,7)
foo(*[1,2,4,5,6,7]) #這裡的*的意思是把list中的值解壓
**kwargs的用法:(多餘的值以字典的形式保留)#**kwargs的用法
deffoo
(x,y,**kwargs):
print(x,y)
print(kwargs)
foo(x=1,y=2,z=3,a=5,b=6)
foo(**) #這裡的**的用法是把dict中的值解壓
*args和**kwargs的用法:def
bar(x,y,z):
print(x,y,z)
def(*args,**kwargs):
#args=(1) kwargs=
bar(*args,**kwargs) #bar(*(1),**)
命名關鍵字引數:指的是定義在*後的引數,該引數必須被傳值(除非它有預設值),而且必須按照key=value的形式傳參deffoo(x,y,*args,n):
#這裡的n必須使用關鍵字傳參
print(x,y)
print(args)
print(n)
foo(1,2,3,4,5,n=1231)
Python基礎 函式 函式引數
引數就是傳入的值 示例 usr bin env python3 coding utf 8 函式的引數和預設引數 defregist name,age,city shenzhen print name name print age age print city city 執行結果 d pythonpr...
函式基礎(一) 函式 引數
說明一點奧,如果你前置文章沒有看懂,那麼不建議你直接看這個 因為看了也是浪費時間,沒有意義 好,接下來就是python的靈魂部分了 函式 在歷史的長河中,遇到複雜問題的時候,人們總是想能不能對這個問題簡單化處理 於是,模組啊,函式啊什麼的,包括各種演算法就接踵而至了 那函式原先是怎麼想出來的呢?在原...
函式基礎和函式引數
1.什麼是函式 1 概念 函式就是對實現某一特定功能的 段的封裝 機器 2 分類 系統函式 系統已將定義了,程式設計師可以直接使用的函式,比如 print,input,type,ord,chr,bin,len,id等 別人造好的機器 自定義函式 程式設計師自己定義使用的函式 自己造機器 2.函式的定...