1. 程式人生 > >Python開發基礎 day5 函數的定義與使用

Python開發基礎 day5 函數的定義與使用

foo asdfasd 文件 可變 ron 賦值 group max python

#coding:utf-8:
# x= # uhello

# 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(y=10,x=1)
# foo(y=10,x=1) #關鍵字參數可以不用像位置實參一樣與形參一一對應,指名道姓地傳值

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
#默認參數:在定義函數階段,就已經為形參賦值,定義階段有值,調用階段可以不用傳值

# def func(x,y=10):
# print(x)
# print(y)


# func(1,20)
# func(1)

 

# def func(y=10,x):
# print(x)
# print(y)

#位置實參
#關鍵字實參

#位置形參
#默認參數(形參)


#形參的應用:值經常變化的需要定義成位置形參,
# 值大多數情況下都一樣,需要定義成默認參數

# def register(name,age,sex=male):
# print(name,age,sex)
#
# register(alex,1000)
# register(wupeiqi,9000)
# register(yuanhao,10000)
# register(王鐵蛋,10000,female)

#默認參數需要註意的問題一:必須放在位置形參後面
#默認參數需要註意的問題二:默認參數通常要定義成不可變類型
#默認參數需要註意的問題三:默認參數只在定義階段被賦值一次

# x=10
# def func(name,age=x):
# print(name)
# print(age)
# x=20
#
# func(egon)

 

 

# def func(name,age=10,sex=male,hobby=[play1,play2]):
# print(name)
# print(age)
# print(hobby)
#
# func(egon)

#===================================part4
#可變長參數:可變長指的是實參的個數不固定
#按位置定義的可變長度的實參:*
#按關鍵字定義的可變長度的實參:**

#
# def func(x,y,*args): #x=1,y=2,args=(3,4,5,6)
# print(x,y)
# print(args)
#
# func(1,2,3,4,5,6)

 


# def func(x,y,*args): #args=(3,4,5,6)
# print(x,y)
# print(args)
#
# func(1,2,*(3,4,5,6)) #foo(1,2,3,4,5,6)


# def func(x,y,z):
# print(x,y,z)
#
# # func(1,*(2,3)) #func(1,2,3)
# func(*(2,3)) #func(2,3)

 

#
# def func(x,y=2,z=1):
# print(x,y,z)
#
#
# func(*(a,b,c)) #func(a,b,c)

# 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 4

 

print(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()) #局部作用域name

func()

print(globals() is locals())


#局部作用域----->全局作用域

Python開發基礎 day5 函數的定義與使用