Python 学习第三部分函数——第一章函数基础
?
函數是python 為了代碼最大程度的重用和最小代碼冗余而提供的最基本的程序結構。使用它我們可以將復雜的系統分解為可管理的部件。
函數相關語句
def...? ? ? ? ? 創建一個對象并將其賦值給某一個對象
return? ? ? ? 將一個結果對象發送給調用者
global? ? ? ? 聲明了一個模塊級的變量并賦值
nonlocal? ? 聲明了將要賦值的一個封閉的函數變量
yield? ? ? ? ? 向調用者發回一個結果對象,但是記住它離開的地方
lambda? ? ? 創建一個對象,將其結果返回
函數定義和調用
實例一:
1 def times(x,y): #函數定義 2 return x*y #函數主體 3 4 #函數調用 5 a = times(3,4) 6 b = times('hello',4) 7 print(a,b) #12 hellohellohellohello實例二:求兩個集合的交集
1 def intersect(seq1,seq2): 2 res = [] 3 for i in seq1: 4 for i in seq2: 5 res.append(i) 6 return res 7 8 #函數調用 9 10 s1 = 'admin' 11 s2 = 'awsemis' 12 print(intersect(s1,s2)) #['a','m','i']作用域
在任何情況下,一個變量的作用域(它所使用的地方)總是由在代碼中被賦值的地方所決定,并且與函數調用完全沒有關系。實際上,變量可以在3個不同的地方分配,分別對應3種不同的作用域:
???????? 1. 如果一個變量在def內賦值,它被定位在這個函數內。
???????? 2. 如果一個變量在一個嵌套的def中賦值,對于嵌套的函數來說,它是非本地的。
???????? 3. 如果在def之外賦值,它就是整個文件全局的。
a = 99 #a為全局變量 def num_a():a=88 # a為本地變量(只在def語句內是可見的)return a print(a) #99 print(num_a()) #88 盡管這兩個變量名都是 a,但是它們的作用域可以把它們區別開來。實際上,函數的作用域有助于防止程序之中變量名的沖突域,并且有助于函數成為更加獨立的程序單元。作用于法則:
函數定義了本地作用域,而模塊定義的是全局作用域。這兩個作用域有如下的關系
1.內嵌的模塊是全局作用域。
2.全局作用域的作用范圍僅限于單個文件
3.每次對函數的調用都創建了一個新的本地作用域。
4.賦值的變量名除非聲明為全局變量或非本地變量,否則均為本地變量
5.所有其他的變量名都可以歸納為本地、全局或者內置的。
python 的作用域的關系如下:變量名引用分為三個作用域進行查找:首先是本地(L),之后是函數內(E)(如果有的話),之后全局(G),最后是內置(B)。
實例: #Global scope 全局作用域 x = 99 # x和func為全局作用域(global scope) def func(y):#Local scope 本地作用域z = x + y #y和z 為本地作用域(local scope)return z print(func(1)) #100global語句
它是一個命名空間的聲明。它告訴python函數打算生成一個或多個全局變量名。
全局變量名總結:
???????? 1. 全局變量是位于模塊文件內部的頂層的變量名。
???????? 2. 全局變量如果是在函數內被賦值的話,必須經過聲明。
???????? 3. 全局變量名在函數的內部不經過聲明也可以被引用。
x = 88 # x 為global def func():global x #聲明后,函數外部的變量x就會被改變。不加這個聲明是不能改變外部變量的。x = 99 func() print(x) #99?嵌套作用域實例
x = 99 #global 全局作用域 def f1():x=88 # enclosing 函數內作用域def f2():print(x) #先找本地,本地找不到找函數內,遵循LEGB法則f2() #在函數里面調用函數f2 f1() #88 #調用f1函數nonlocal語句
nonlocal和global一樣,聲明了將要在一個嵌套的作用域中修改的名稱。
區別之處:nonlocal應用于一個嵌套的函數的作用域中的一個名稱,而不是所有def之外的全局模塊作用域;而且在聲明nonlocal名稱的時候,它必須已經存在于該嵌套函數的作用域中。
?
參數
? 必須參數
關鍵字參數
默認參數
不定長參數(*)
不定長參數(**)
def info(name,age,sex='男'): #sex = '男' 為默認參數(默認參數必須放后面)print('Name:%s\nAge:%d\nSex:%s'%(name,age,sex))'''必須參數''' info('xp',26)'''關鍵字參數''' info(age = 26,name = 'xp')info('pp',26,sex='女')'''不定長參數''' def add(*args):print('對元素進行求和:',args) # 傳進參數打印結果是元組類型sum=0for i in args:sum += iprint('求和結果:',sum)add(1,2,3)'''不定長參數二''' def info(*args,**kwargs):# print(args)print(kwargs) # 打印出 字典 格式for i in kwargs:print('%s:%s'%(i,kwargs[i]))info('xp', 26,sex = '男',job = 'IT') info()位置關系
結論:
*args參數放在左邊,**kwargs參數放在右邊
默認參數在左邊,*args參數放在左邊,**kwargs參數放在右邊?
?
?
未完待續。。。。。
?
?
?
轉載于:https://www.cnblogs.com/xp0919/p/9771657.html
總結
以上是生活随笔為你收集整理的Python 学习第三部分函数——第一章函数基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【BZOJ1452】[JSOI2009]
- 下一篇: BZOJ2442: [Usaco2011