Python开发基础 day5 函数的定义与使用
# x='你' # u'hello'# print(x.encode('gbk')) # print(b'\xc4\xe3')# y=b'\xc4\xe3' # print(y.decode('gbk'))# x='你' #unicode.encode('utf-8')y=u'你' print repr(y)
?
# while True: # msg=input('>>: ') # # # print(len(msg)) # # res=len(msg) # # if res < 5: # # continue # # else:break # # # if len(msg) < 5: # continue # else:break # # with open('a.txt') as f: # for i in f.readlines(): # print(i,end='')# with open('a.txt') as f: # for i in f: # print(i,end='')# with open('a.txt') as f: # print(f.readline(),end='') # print(f.readline(),end='') # print(f.readline(),end='') # print(f.readline(),end='') # print(f.readline(), end='') # print(f.readline(), end='')# with open('a.txt','r',encoding='utf-8') as f: # print(len(f.read()))# with open('a.txt','rb') as f: # file_size=len(f.read())# import os # print(os.path.getsize('a.txt'))?
函數(shù)參數(shù)的使用:
# def foo(x): # print(x) # # # foo(1) # foo('a') # foo({'a':2})#形參與實(shí)參: # def foo(x,y): #x=1,y=2 # return x+y # # foo(1,2)
?
#===================================part1 #位置參數(shù):按照從左到右的順序依次定義的參數(shù) def foo(x,y): print(x) print(y) #按位置定義的形參,必須被傳值,多一個(gè)不行,少一個(gè)也不行# foo(1,2,3)#按位置定義的實(shí)參,與形參一一對(duì)應(yīng) # foo(2,10)?
??
?
#===================================part2
#關(guān)鍵字參數(shù):實(shí)參在定義時(shí),按照key=value形式定義
?
?
def foo(x,y): print(x) print(y)# foo(1,10) # foo(x=1,y=10) # foo(1,y=10) # foo(y=10,1) # foo(x=10,1)# foo(1,x=10,y=20)# def foo(x,y,z): # print(x) # print(y) # print(z) # # foo(1,z=20,10) # foo(1,y=2,z=10)?
#注意的問(wèn)題一:位置實(shí)參必須在關(guān)鍵字實(shí)參的前面
#注意的問(wèn)題二:實(shí)參的形式既可以用位置實(shí)參又可以是關(guān)鍵字實(shí)參,但是一個(gè)形參不能重復(fù)傳值
?
#===================================part3
#默認(rèn)參數(shù):在定義函數(shù)階段,就已經(jīng)為形參賦值,定義階段有值,調(diào)用階段可以不用傳值
?
?
#位置實(shí)參
#關(guān)鍵字實(shí)參
#位置形參
#默認(rèn)參數(shù)(形參)
#形參的應(yīng)用:值經(jīng)常變化的需要定義成位置形參,
# 值大多數(shù)情況下都一樣,需要定義成默認(rèn)參數(shù)
?
?
?
?
#默認(rèn)參數(shù)需要注意的問(wèn)題一:必須放在位置形參后面
#默認(rèn)參數(shù)需要注意的問(wèn)題二:默認(rèn)參數(shù)通常要定義成不可變類型
#默認(rèn)參數(shù)需要注意的問(wèn)題三:默認(rèn)參數(shù)只在定義階段被賦值一次
?
#===================================part4
#可變長(zhǎng)參數(shù):可變長(zhǎng)指的是實(shí)參的個(gè)數(shù)不固定
#按位置定義的可變長(zhǎng)度的實(shí)參:*
#按關(guān)鍵字定義的可變長(zhǎng)度的實(shí)參:**
?
?
?
?
?
# def func(x,y,**kwargs): #x=1,y=2,kwargs={'a':1,'b':3,'z':3} # print(x,y) # print(kwargs) # # func(1,y=2,z=3,a=1,b=3)# def func(x,y,**kwargs): #x=1,y=2,**kwargs=**{'a':1,'b':3,'z':3} # print(x,y) # print(kwargs) # # func(1,y=2,**{'a':1,'b':3,'z':3}) #func(1,y=2,z=3,b=3,a=1)# def func(x,y=1,z=1): # print(x,y,z) # # func(**{'y':2,'x':1,'z':3}) ## def wrapper(*args,**kwargs): #可以接受任意形式,任意長(zhǎng)度的參數(shù) # print(args) # print(kwargs) # # # wrapper(1,2,3,3,3,3,3,x=1,y=2,z=3)# # def index(name,group): # print('welcome %s to index page,group is: %s' %(name,group)) # # def wrapper(*args,**kwargs): #可以接受任意形式,任意長(zhǎng)度的參數(shù) # # print(args) #args=(1,2,3) # # print(kwargs) #kwargs={'x':1,'y':2,'z':3} # index(*args,**kwargs) #index(*(1,2,3),**{'x':1,'y':2,'z':3}) #index(1,2,3,z=3,y=2,x=1) # # wrapper(name='egon',group='group1')#命名關(guān)鍵字參數(shù):定義在*后的形參,這類形參,必須被傳值,而且要求實(shí)參必須是以關(guān)鍵字的形式來(lái)傳值# def register(**kwargs): # print(kwargs) # if 'name' in kwargs: # print(kwargs['name']) # if 'age' in kwargs: # print(kwargs['age']) # # # # register(name='egon',age=18) # register()# def register(*args,name='egon',age): # print(args) # print(name) # print(age) # # # register(name='egon',age=18) # register(1,2,2,3,age=10)# # def register(name,age,*,group,**kwargs): # print(name) # print(age) # print(kwargs) # # # # register('egon',18) # register('egon1',18,hobby='paly1',group='group1')# def func(x,y=1,*args,z,**kwargs): # print(x) # print(y) # print(args) # print(z) # print(kwargs) # # func(1,2,3,4,5,z=10,a=1,b=2)# # def func(x,*args,z=1,**kwargs): # print(x) # print(args) # print(z) # print(kwargs) # # func(1,2,3,4,5,a=1,b=2,c=3)?
?
?
#形參:位置形參,默認(rèn)參數(shù),*args,命名關(guān)鍵字參數(shù),**kwargs
?
函數(shù)的返回值:
?
# y=x**2# def func(x): # return x**2 # y=func(10) # 10**2 # # print(y)# def foo(): # return None # # res=foo() # print(res)# def foo(): # return {'a':1} # # res=foo() # print(res['a'])# def foo(): # return {'a':1},1,'a',[1,2] # # res=foo() # print(res)''' 返回值:可以返回任意類型 沒(méi)有return:None return value: value return val1,val2,val3 :(val1,val2,val3)return的效果:只能返回一次值,終止函數(shù)的執(zhí)行 ''' def foo(): return 1 print('=====>') return 2 return 3 return 4print(foo())?
?函數(shù)的使用原則:
?
#函數(shù)的使用必須遵循:先定義后使用的原則
?
#函數(shù)的定義,與變量的定義是相似的,如果沒(méi)有事先定義函數(shù)而直接引用
#就相當(dāng)于在引用一個(gè)不存在變量名
?
# print(x) #NameError # x=1# func # # def func(): # print('hello world')# def func(): # print('hello world') # # # print(func) # func()# def bar(): # print('from bar') # # def foo(): # print('from foo') # bar() # # foo()# #定義階段 # def foo(): # print('from foo') # bar() # # def bar(): # print('from bar') # # #調(diào)用階段 # foo()#定義階段:只檢測(cè)語(yǔ)法,不執(zhí)行代碼 # def func(): # if 1>2 # print('hahahahahahah')def func(): #語(yǔ)法沒(méi)問(wèn)題,邏輯有問(wèn)題,引用一個(gè)不存在的變量名 asdfasdfasdfasdfasdf?
?
函數(shù)對(duì)象:
#函數(shù)是第一類對(duì)象: 指的是函數(shù)可以被當(dāng)做數(shù)據(jù)傳遞def func(): print('from func')#可被引用 # f=func#可以當(dāng)做函數(shù)的參數(shù) # def func(): # print('from func') # def foo(x): # print(x) # x() # # foo(func)#可以當(dāng)做函數(shù)的返回值 # def foo(): # print('from foo') # def bar(): # return foo # f=bar() # print(f) # print(foo)# x=0 # def f1(): # x=1 # def f2(): # # x=2 # print(x) # return f2 # f=f1() # # print(f) # f()#可以當(dāng)做容器類型的元素 # def select(): # print('select function') # # func_dic={ # 'select':select, # } # # # print(func_dic['select']) # func_dic['select']()# # def select(): # print('select func') # # def delete(): # print('delete func') # # def change(): # print('change func') # # def add(): # print('add func') # # # while 1: # cmd=input('>>: ').strip() # if not cmd:continue # if cmd == 'select': # select() # elif cmd == 'delete': # delete() # elif cmd == 'change': # change() # elif cmd == 'add': # add() # else: # print('無(wú)效的命令')def select(cmd_l): filename=cmd_l[-1] pattern=cmd_l[1]with open(filename,'r',encoding='utf-8') as f: for line in f: if pattern in line: print(line)def delete(): print('delete func')def change(): print('change func')def add(): print('add func')def check(): print('check func')func_dic={ 'select':select, 'delete':delete, 'change':change, 'add':add, 'check':check, }while 1: inp=input('>>: ').strip() if not inp:continue cmd_l=inp.split() # print(cmd_l) cmd=cmd_l[0] if cmd in func_dic: func_dic[cmd](cmd_l) else: print('無(wú)效的命令')?
?函數(shù)嵌套:
#函數(shù)的嵌套調(diào)用
# # def max2(x,y): # if x > y: # return x # else: # return y # # def max4(a,b,c,d): # res1=max2(a,b) #23 # res2=max2(res1,c) #23 # res3=max2(res2,d) #31 # return res3 # # # print(max4(11,23,-7,31))?
#函數(shù)的嵌套定義
def f1(): def f2(): def f3(): print('from f3') print('from f2') f3() print('from f1') f2() # print(f1) f1()''' from f1 from f2 from f3'''?
?
名稱空間與作用域:
#名字空間:存放名字與值的綁定關(guān)系
#名稱空間分為三種
#內(nèi)置名稱空間:python解釋器自帶的名字,python解釋器啟動(dòng)就會(huì)生成
?
#全局名稱空間:文件級(jí)別定義的名字都會(huì)存放與全局名稱空間,執(zhí)行python文件時(shí)會(huì)產(chǎn)生
# x=1 # def func(): # pass # # class Foo: # pass # # import os # # if 1 > 2 : # y=3#局部名稱空間:定義在函數(shù)內(nèi)部的名字,局部名稱空間只有在調(diào)用函數(shù)時(shí)才會(huì)生效,函數(shù)調(diào)用結(jié)束則失效 # def func(x,y): #x=1,y=2 # z=3# func(1,2)?
#三者的加載順序:內(nèi)置名稱空間->全局名稱空間->局部名稱空間
#取值:局部名稱空間->全局名稱空間->內(nèi)置名稱空間
?
# # max=10 # def func(): #x=1 # # max=20 # print(max) # # # func()# max=10 # # def func(): #x=1 # max=20 # # print(max) # func() # # # print(max) ## # x=0 # def f1(): # # x=1 # def f2(): # # x=2 # def f3(): # # x=3 # print(x) # f3() # f2() # # f1()?
#作用域:作用范圍
#全局作用域:內(nèi)置名稱空間與全局名稱空間的名字屬于全局范圍,
# 在整個(gè)文件的任意位置都能被引用,全局有效
#局部作用域:局部名稱空間的名字屬于局部范圍,
#只在函數(shù)內(nèi)部可以被引用,局部有效
?
# x=1 # def foo(): # def f2(): # print(x) # f2() # def bar(): # print(x) # # foo() # bar()# def f1(): # x=1 # def f2(): #f2=value # # x=2 # print(x) # f2() # f1()x=1 def func(): x=2 def f1():pass # print(dir(globals()['__builtins__'])) #全局作用域name # print(locals()) #局部作用域namefunc()print(globals() is locals())#局部作用域----->全局作用域?
轉(zhuǎn)載于:https://www.cnblogs.com/bsxq/p/7002996.html
總結(jié)
以上是生活随笔為你收集整理的Python开发基础 day5 函数的定义与使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Qt_模块简介
- 下一篇: Python 文件写操作