本文目錄一覽:
- 1、python 函數參數 是什麼意思
- 2、求教python在文件中寫入中文需要的兩個參數是做什麼的?
- 3、求教python面向對象中 __getattr__方法為什麼要兩個參數
- 4、python中for循環有兩個參數
- 5、python self 為什麼是兩個參數
python 函數參數 是什麼意思
Python 函數定義以及參數傳遞
1.函數定義
#形如def func(args…):
doSomething123
以關鍵字def 開頭,後面是函數名和參數下面是函數處理過程。
舉例:
def add( a, b ):
return a+b12
參數可以設定默認值,如:
def add( a, b=10 ): #注意:默認值參數只會運算一次
return a+b12
默認值參數只會運算一次是什麼意思?
def func( a, b=[] ): #b的默認值指向一個空的列表,每次不帶默認值都會指向這塊內存
b.append(a) return b
print(func(1))#向默認的空列表裡加入元素1 ,默認列表裡已經是[1]print(func(2))#向默認的列表裡加入元素2,默認列表裡已經是[1,2]print(func(3,[]))#向b指向的空列表裡加入元素1 ,默認列表裡還是[1,2]print(func(4))#向默認的列表裡加入元素4,默認列表裡已經是[1,2,4]”’
結果:
[1]
[1, 2]
[3]
[1, 2, 4]
”’12345678910111213141516
這下明白為什麼默認參數只計算一次了吧,函數參數不傳遞時默認值總是指向固定的內存空間,就是第一次計算的空間。
2.參數傳遞
def func(a, b):
print(‘a=%d, b=%d’ % (a,b) )12
在使用函數時可以如下方式,結果都是相同的
func(10,20) #不使用參數名,需要按參數順序傳遞func(a=10,b=20) #使用參數名可以不按順序傳遞func(b=20,a=10)#結果:a=10, b=20a=10, b=20a=10, b=201234567
如果函數定義形式如下方式:
def func(*args): #這種定義會把傳遞的參數包成元組
print(args,type(args))
func(10,20)#結果:#(10, 20) class ‘tuple’1234567
舉一個和上述過程相反的例子:
def func(a,b):
print(‘a=%d, b=%d’ % (a,b) )
a = (10, 20)
func(*a) #在調用函數使用`*`則會把元組解包成單個變量按順序傳入函數#結果:a=10, b=20123456
總結:*號在定義函數參數時,傳入函數的參數會轉換成元組,如果 *號在調用時則會把元組解包成單個元素。
另一種定義:
def func(**kw):#使用**定義參數會把傳入參數包裝成字典dict
print(kw, type(kw) )
func(a=10,b=20)#這種函數在使用時必須指定參數值,使用key=value這種形式#結果:{‘b’: 20, ‘a’: 10} class ‘dict’12345
相反的例子:
def func(a,b):
print(‘a=%d, b=%d’ % (a,b) )
d = {‘a’:10, ‘b’:20 }
func(**d) #在調用時使用**會把字典解包成變量傳入函數。12345
def func(*args, **kw):#這種形式的定義代表可以接受任意類型的參數
print(args,kw )12
總結:**號在定義函數參數時,傳入函數的參數會轉換成字典,如果 **號在調用時則會把字典解包成單個元素。
lambda表達式
lambda表達式就是一種簡單的函數
形如 f = lambda 參數1,參數2: 返回的計算值
例如:
add = lambda x,y: x+y
print(add(1,2))”’
結果:3
”’12345
求教python在文件中寫入中文需要的兩個參數是做什麼的?
encoding是文件編碼,默認的一般是ansi,如果不指定的話,打開就有可能看到亂碼。
ensure_ascii是json序列化的一個特性,是為了方便傳輸,避免編碼問題(也就是上面的encoding),可用把unicode字符轉碼為ascii字符,這樣就不需要指定encoding了。但是導致的問題就是肉眼看不出中文內容(和亂碼有本質區別),ensure_ascii=False的意思就是對中文不做轉碼處理,原樣輸出到json
求教python面向對象中 __getattr__方法為什麼要兩個參數
首先,__getattr__是一個實例方法,既然是實例方法那第一個參數肯定是self,表示實例對象
其次,__getattr__是用來獲取屬性的,既然是獲取屬性的那這個方法就得知道當前要獲取的屬性叫什麼名字,也就是第二個參數name
所以,__getattr__需要兩個參數。
python中for循環有兩個參數
應該這樣理解:
dict.items()結果是一個列表,列表的每一個值都是一個包含兩個元素的元組,
for遍歷的是一個元組對象,k和v是元組裡的參數。
所以(k,v)是一個整體,一下結果和你的結果一樣的,
for x in d.items():
print “dict[%s]=”%x[0],x[1]
其中x就是(k,v),只是要取鍵值的話你上面的更方便。
祝你成功!
python self 為什麼是兩個參數
Python中默認參數self的理解
類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱,但是在調用這個方法的時候你不為這個參數賦值,Python會提供這個值。這個特別的變量指對象本身,按照慣例它的名稱是self。
雖然你可以給這個參數任何名稱,但是強烈建議你使用self這個名稱——其他名稱都是不贊成你使用的。使用一個標準的名稱有很多優點——你的程序讀者可以迅速識別它,如果使用self的話,還有些IDE(集成開發環境)也可以幫助你。
給C++/Java/C#程序員的注釋Python中的self等價於C++中的self指針和Java、C#中的this參考。
你一定很奇怪Python如何給self賦值以及為何你不需要給它賦值。舉一個例子會使此變得清晰。假如你有一個類稱為MyClass和這個類的一個實例MyObject。當你調用這個對象的方法MyObject.method(arg1, arg2)的時候,這會由Python自動轉為MyClass.method(MyObject, arg1, arg2)——這就是self的原理了。
這也意味着如果你有一個不需要參數的方法,你還是得給這個方法定義一個self參數。
聲明add()方法時,若不加self,則提示
TypeError: add() takes exactly 2 arguments (3 given)
File “D:\PythonWorkplace\PythonDemo\Tet.py”, line 15, in module
test.add(1,3)
錯誤。
拓展一下:
self在Python里不是關鍵字。self代表當前對象的地址。self能避免非限定調用造成的全局變量。
self是一種習慣,如上面的程序,把sayHi(self)換成sayHi(fles),同樣可以得到正確的輸出。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/182096.html