1.文件修改的兩種方式
# 一:函數(shù)的參數(shù)分為兩大類
# 1.形參:在定義函數(shù)時,括號內(nèi)定義的變量名哺徊,稱之為形式參數(shù),簡稱形參==》變量名
# def func(x,y):
#? ? x = 1
#? ? y = 2
#? ? print(x)
#? ? print(y)
# 2.實(shí)參:在調(diào)用函數(shù)時乌妒,括號內(nèi)傳入的值稱之為實(shí)際參數(shù)典徘,簡稱實(shí)參===》變量值
# func(1,2)
# 二:在python中參數(shù)的種類
# 1.位置參數(shù):
# (1)位置形參:在函數(shù)定義階段從左到右的順序依次定義形參(變量名),稱之為位置形參
# 特點(diǎn):必須被傳值
# def func(x,y):
#? ? print(x,y)
# func(1,2)
# func(1) # 少一個不行
# func(1,2,3) # 多一個也不行
# (2)位置實(shí)參:在函數(shù)定義階段從左到右的順序依次定義實(shí)參(傳入的變量值)预皇,稱之為位置實(shí)參
# 特點(diǎn):按照位置傳值侈玄,一一對應(yīng)
# func(1,2,3,4,5,6)
# 2.關(guān)鍵字實(shí)參:在函數(shù)調(diào)用階段按照key=value的形式為指定的形參傳值,稱之為關(guān)鍵字實(shí)參
# 特點(diǎn):在傳值時可以完全打亂順序吟温,但是仍然能指定形參傳值
# def func(name, age, ):
#? ? print(name, age, )
# func("egon",18)
# func(18,"egon")
# func(age=18,name="egon")? # 寫出關(guān)鍵字就可以隨意賦值
# 注意:可以混用位置實(shí)參和關(guān)鍵字實(shí)參
# 1.但是位置實(shí)參必須放在關(guān)鍵字實(shí)參的前面
# 2.不能為同一個形參重復(fù)賦值
# def func(name, age, salary):
#? ? print(name)
#? ? print(age)
#? ? print(salary)
# func('egon',salary=3.1,age=18)
# func('egon',salary=3.1,18) # 錯誤
# func('egon', 18, salary=3.1)? # 錯誤
# func('egon',18,age=19,salary=3.3)? # 錯誤
# 3.默認(rèn)形參:在函數(shù)定義階段就已經(jīng)為某個形參賦值序仙,該形參稱之為有默認(rèn)值的形參,簡稱默認(rèn)形參
# 特點(diǎn):定義階段就已經(jīng)被賦值意味著在函數(shù)調(diào)用階段可以不用為其賦值
# def func(x,y=2):
#? ? print(x,y)
# func(1)
# func(1,33333)
# 注意
# 1:默認(rèn)形參放在位置形參的后面
# def func(y=2,x)? # 錯誤
#? ? pass
# 2 默認(rèn)形參的值通常是不可變類型
# def func(name,hobby,hobbies=[]):
#? ? hobbies.append(hobby)
#? ? print("%s 的愛好是:%s" %(name,hobbies))
#
# func("egon",'play')
# func('lili','music')
# func("jack",'read')
'''
egon 的愛好是:['play']
lili 的愛好是:['play', 'music']
jack 的愛好是:['play', 'music', 'read']? 在同一個地址空間連續(xù)添加了'''
# def func(name,hobby,hobbies=None):
#? ? if hobbies is None:
#? ? ? ? hobbies=[]
#? ? hobbies.append(hobby)
#? ? print("%s 的愛好是:%s" %(name,hobbies))
#
# func("egon",'play')
# func('lili','music')
# func("jack",'read')
'''
egon 的愛好是:['play']
lili 的愛好是:['music']
jack 的愛好是:['read']? 先設(shè)置一個None 每次調(diào)用函數(shù)都生成一個新的列表空間'''
# 3 默認(rèn)形參的值只在函數(shù)定義階段被賦值一次鲁豪,函數(shù)定義之后的改變對默認(rèn)形參沒有影響
# m=333
def func(x,y=333):# y=333
? ? print(x,y)
y=44444
func(1)# 如果不在實(shí)參中直接修改潘悼,默認(rèn)的形參是不會改變的
def register(name,age,gender='male'):
print(name)
print(age)
print(gender)
register('egon',18,)
register('jack',20,)
register('tom',21,)
register('鄭秀文',18,'female')# 針對不同類型的需求來定義函數(shù)可以減少代碼量
2.函數(shù)
'''
1.什么是函數(shù)
? ? 具備某一功能的工具===》函數(shù)
工具的使用:
? ? ? ? 事先準(zhǔn)備好工具=====》函數(shù)的定義
? ? ? ? 遇到需要的運(yùn)用場景就拿來用=====》函數(shù)的調(diào)用2.為什么要有函數(shù)? 1.程序的組織結(jié)構(gòu)不清晰律秃,可讀性差? 2.如果要用到重復(fù)的功能,只能拷貝功能的實(shí)現(xiàn)代碼===》代碼冗余? 3.可擴(kuò)展性差3.如何使用函數(shù)
函數(shù)的使用原則:先定義治唤,后調(diào)用
? ? 定義函數(shù)? ? ? ? def 函數(shù)名(參數(shù)1棒动,參數(shù)2,參數(shù)3宾添。船惨。。缕陕。掷漱。)’‘’
? ? ? ? 文檔注釋‘’‘
? ? ? ? 代碼? ? ? ? return 返回值
調(diào)用函數(shù):
? ? ? ? 函數(shù)名(值1,值2榄檬,值3卜范。。鹿榜。海雪。)'''
# 定義函數(shù):申請內(nèi)存空間把函數(shù)體代碼保存下來,然后把內(nèi)存地址綁定給函數(shù)名===》函數(shù)名 = 函數(shù)內(nèi)存地址
# def sayhi():
#? ? print('='*10)
#? ? print('hello')
#? ? print('='*10)
# print(sayhi) # 打印的是函數(shù)名的內(nèi)存地址
# 二:調(diào)用函數(shù):函數(shù)名()===》函數(shù)的內(nèi)存地址()舱殿,會觸發(fā)函數(shù)體代碼的運(yùn)行
x =10
print(x)
# sayhi()
# 二:定義函數(shù)的三種格式
# 2.1:無參函數(shù)
# def login():
#? ? inp_name=input("your name: ").strip()
#? ? inp_pwd=input("your pwd: ").strip()
#? ? if inp_name == "egon" and inp_pwd == "123":
#? ? ? ? print('login successful')
#? ? else:
#? ? ? ? print('login error')
#
# login()
# def sayhi():
#? ? print('='*100)
#? ? print('hello')
#? ? print('='*100)
#
# sayhi()
# 2.2:有參函數(shù)
def sayhi(s, n):
print(s * n)
print('hello')
print(s * n)
sayhi('&', 10)
def max(x, y):
if x > y:
print(x)
else:
print(y)
max(10, 20)
# 2.3:空函數(shù)
def func():
pass
# 三:函數(shù)的調(diào)用
# return:
# 函數(shù)內(nèi)可以有多個return奥裸,但只要執(zhí)行一次函數(shù)就立刻結(jié)束,并把return后的值當(dāng)作本次調(diào)用的結(jié)果返回
# 函數(shù)可以有三種形式的返回值
# 1.return 值:返回的就是值本身
# 2.return 值1沪袭,值2湾宙,值3...:返回一個元組
# 3.沒有return:默認(rèn)返回None
def func():
print(1)
return 123
res = func()
print(res)
# 四:函數(shù)調(diào)用的三種格式
# 4.1 語句形式:單純地調(diào)用一下函數(shù)就完了
# def sayhi(s,n):
#? ? # s = '-'
#? ? # n = 20
#? ? print(s*n)
#? ? print('hello')
#? ? print(s*n)
# sayhi('*',30)
# 4.2 表達(dá)式形式:
def max2(x, y):
if x > y:
return x
else:
return y
# res=max2(11,22) * 12
# print(res)
# 4.3 可以把函數(shù)的調(diào)用當(dāng)作值傳給另外一個函數(shù)
# print(max2(11,22))
# 總結(jié)
# 函數(shù)的使用一定要分兩個階段去看:
# 1.定義階段:只檢測語法,不執(zhí)行代碼
# 2.調(diào)用階段:執(zhí)行函數(shù)代碼體
# 如果發(fā)生語法錯誤冈绊,定義階段會立馬檢測出來
# def func():
#? ? print('hello'
# 如果是邏輯錯誤侠鳄,只能在調(diào)用階段檢測到
# def func():
#? ? xxx
# func()
# 示范1:
def bar():
print('from bar')
def foo():
print('from foo')
bar()
foo()
# 示范2:
def foo():
print('from foo')
def bar():
print('from bar')# 雖然這個函數(shù)是后定義的但是代碼還是在定義階段并不會發(fā)生錯誤
foo()# 到了調(diào)用階段找到對應(yīng)的代碼直接調(diào)用就行了
3.函數(shù)的參數(shù)
# 一:函數(shù)的參數(shù)分為兩大類
# 1.形參:在定義函數(shù)時酗捌,括號內(nèi)定義的變量名截型,稱之為形式參數(shù),簡稱形參==》變量名
# def func(x,y):
#? ? x = 1
#? ? y = 2
#? ? print(x)
#? ? print(y)
# 2.實(shí)參:在調(diào)用函數(shù)時哼鬓,括號內(nèi)傳入的值稱之為實(shí)際參數(shù)毅该,簡稱實(shí)參===》變量值
# func(1,2)
# 二:在python中參數(shù)的種類
# 1.位置參數(shù):
# (1)位置形參:在函數(shù)定義階段從左到右的順序依次定義形參(變量名)博秫,稱之為位置形參
# 特點(diǎn):必須被傳值
# def func(x,y):
#? ? print(x,y)
# func(1,2)
# func(1) # 少一個不行
# func(1,2,3) # 多一個也不行
# (2)位置實(shí)參:在函數(shù)定義階段從左到右的順序依次定義實(shí)參(傳入的變量值),稱之為位置實(shí)參
# 特點(diǎn):按照位置傳值眶掌,一一對應(yīng)
# func(1,2,3,4,5,6)
# 2.關(guān)鍵字實(shí)參:在函數(shù)調(diào)用階段按照key=value的形式為指定的形參傳值挡育,稱之為關(guān)鍵字實(shí)參
# 特點(diǎn):在傳值時可以完全打亂順序,但是仍然能指定形參傳值
# def func(name, age, ):
#? ? print(name, age, )
# func("egon",18)
# func(18,"egon")
# func(age=18,name="egon")? # 寫出關(guān)鍵字就可以隨意賦值
# 注意:可以混用位置實(shí)參和關(guān)鍵字實(shí)參
# 1.但是位置實(shí)參必須放在關(guān)鍵字實(shí)參的前面
# 2.不能為同一個形參重復(fù)賦值
# def func(name, age, salary):
#? ? print(name)
#? ? print(age)
#? ? print(salary)
# func('egon',salary=3.1,age=18)
# func('egon',salary=3.1,18) # 錯誤
# func('egon', 18, salary=3.1)? # 錯誤
# func('egon',18,age=19,salary=3.3)? # 錯誤
# 3.默認(rèn)形參:在函數(shù)定義階段就已經(jīng)為某個形參賦值朴爬,該形參稱之為有默認(rèn)值的形參即寒,簡稱默認(rèn)形參
# 特點(diǎn):定義階段就已經(jīng)被賦值意味著在函數(shù)調(diào)用階段可以不用為其賦值
# def func(x,y=2):
#? ? print(x,y)
# func(1)
# func(1,33333)
# 注意
# 1:默認(rèn)形參放在位置形參的后面
# def func(y=2,x)? # 錯誤
#? ? pass
# 2 默認(rèn)形參的值通常是不可變類型
# def func(name,hobby,hobbies=[]):
#? ? hobbies.append(hobby)
#? ? print("%s 的愛好是:%s" %(name,hobbies))
#
# func("egon",'play')
# func('lili','music')
# func("jack",'read')
'''
egon 的愛好是:['play']
lili 的愛好是:['play', 'music']
jack 的愛好是:['play', 'music', 'read']? 在同一個地址空間連續(xù)添加了'''
# def func(name,hobby,hobbies=None):
#? ? if hobbies is None:
#? ? ? ? hobbies=[]
#? ? hobbies.append(hobby)
#? ? print("%s 的愛好是:%s" %(name,hobbies))
#
# func("egon",'play')
# func('lili','music')
# func("jack",'read')
'''
egon 的愛好是:['play']
lili 的愛好是:['music']
jack 的愛好是:['read']? 先設(shè)置一個None 每次調(diào)用函數(shù)都生成一個新的列表空間'''
# 3 默認(rèn)形參的值只在函數(shù)定義階段被賦值一次,函數(shù)定義之后的改變對默認(rèn)形參沒有影響
# m=333
def func(x,y=333):# y=333
? ? print(x,y)
y=44444
func(1)# 如果不在實(shí)參中直接修改,默認(rèn)的形參是不會改變的
def register(name,age,gender='male'):
print(name)
print(age)
print(gender)
register('egon',18,)
register('jack',20,)
register('tom',21,)
register('鄭秀文',18,'female')# 針對不同類型的需求來定義函數(shù)可以減少代碼量