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'))?
函數參數的使用:
# def foo(x): # print(x) # # # foo(1) # foo('a') # foo({'a':2})#形參與實參: # def foo(x,y): #x=1,y=2 # return x+y # # foo(1,2)
?
#===================================part1 #位置參數:按照從左到右的順序依次定義的參數 def foo(x,y): print(x) print(y) #按位置定義的形參,必須被傳值,多一個不行,少一個也不行# foo(1,2,3)#按位置定義的實參,與形參一一對應 # foo(2,10)?
??
?
#===================================part2
#關鍵字參數:實參在定義時,按照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)?
#注意的問題一:位置實參必須在關鍵字實參的前面
#注意的問題二:實參的形式既可以用位置實參又可以是關鍵字實參,但是一個形參不能重復傳值
?
#===================================part3
#默認參數:在定義函數階段,就已經為形參賦值,定義階段有值,調用階段可以不用傳值
?
?
#位置實參
#關鍵字實參
#位置形參
#默認參數(形參)
#形參的應用:值經常變化的需要定義成位置形參,
# 值大多數情況下都一樣,需要定義成默認參數
?
?
?
?
#默認參數需要注意的問題一:必須放在位置形參后面
#默認參數需要注意的問題二:默認參數通常要定義成不可變類型
#默認參數需要注意的問題三:默認參數只在定義階段被賦值一次
?
#===================================part4
#可變長參數:可變長指的是實參的個數不固定
#按位置定義的可變長度的實參:*
#按關鍵字定義的可變長度的實參:**
?
?
?
?
?
# 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): #可以接受任意形式,任意長度的參數 # 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): #可以接受任意形式,任意長度的參數 # # 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')#命名關鍵字參數:定義在*后的形參,這類形參,必須被傳值,而且要求實參必須是以關鍵字的形式來傳值# 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)?
?
?
#形參:位置形參,默認參數,*args,命名關鍵字參數,**kwargs
?
函數的返回值:
?
# 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)''' 返回值:可以返回任意類型 沒有return:None return value: value return val1,val2,val3 :(val1,val2,val3)return的效果:只能返回一次值,終止函數的執行 ''' def foo(): return 1 print('=====>') return 2 return 3 return 4print(foo())?
?函數的使用原則:
?
#函數的使用必須遵循:先定義后使用的原則
?
#函數的定義,與變量的定義是相似的,如果沒有事先定義函數而直接引用
#就相當于在引用一個不存在變量名
?
# 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') # # #調用階段 # foo()#定義階段:只檢測語法,不執行代碼 # def func(): # if 1>2 # print('hahahahahahah')def func(): #語法沒問題,邏輯有問題,引用一個不存在的變量名 asdfasdfasdfasdfasdf?
?
函數對象:
#函數是第一類對象: 指的是函數可以被當做數據傳遞def func(): print('from func')#可被引用 # f=func#可以當做函數的參數 # def func(): # print('from func') # def foo(x): # print(x) # x() # # foo(func)#可以當做函數的返回值 # 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()#可以當做容器類型的元素 # 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('無效的命令')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('無效的命令')?
?函數嵌套:
#函數的嵌套調用
# # 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))?
#函數的嵌套定義
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'''?
?
名稱空間與作用域:
#名字空間:存放名字與值的綁定關系
#名稱空間分為三種
#內置名稱空間:python解釋器自帶的名字,python解釋器啟動就會生成
?
#全局名稱空間:文件級別定義的名字都會存放與全局名稱空間,執行python文件時會產生
# x=1 # def func(): # pass # # class Foo: # pass # # import os # # if 1 > 2 : # y=3#局部名稱空間:定義在函數內部的名字,局部名稱空間只有在調用函數時才會生效,函數調用結束則失效 # def func(x,y): #x=1,y=2 # z=3# func(1,2)?
#三者的加載順序:內置名稱空間->全局名稱空間->局部名稱空間
#取值:局部名稱空間->全局名稱空間->內置名稱空間
?
# # 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()?
#作用域:作用范圍
#全局作用域:內置名稱空間與全局名稱空間的名字屬于全局范圍,
# 在整個文件的任意位置都能被引用,全局有效
#局部作用域:局部名稱空間的名字屬于局部范圍,
#只在函數內部可以被引用,局部有效
?
# 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())#局部作用域----->全局作用域?
轉載于:https://www.cnblogs.com/bsxq/p/7002996.html
總結
以上是生活随笔為你收集整理的Python开发基础 day5 函数的定义与使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt_模块简介
- 下一篇: perl怎么拷贝一个文件到另一个文件夹中