開始看Python也有一段時間了,但是之前一直是小打小鬧,連函數都沒用過,頂多用過幾個內置函數就高興到晚上能多吃一口飯#這大概會成爲我長胖的藉口了。
突然想着還是得寫點東西,才能逼着自己去掌握。
先借這個位置掛一下某大佬的博客:某個除了系圍巾什麼都會的大佬
閒言少敘,還是回到主題上來。今天想寫的是在Python中如何自定義函數。
'''
介於我只學過C++,所以只能和C++對比了,望大家諒解(頂鍋蓋逃走)。
'''
首先,先放一段代碼。這個大概是最基礎的了(✺ω✺)。
def function1(str):
print(str)
return
function1("function1")
function1("emmmmmmmm")
該代碼無輸入。輸出爲:
function1
emmmmmmmm
下面,想先談談Python和C++在自定義函數上的區別和聯繫。
①在Python中最大的特點(在我眼中),就是那個冒號,然後C++中也有一大特色就是分號。(真是遙相呼應(╯‵□′)╯︵┻━┻)如果沒有加冒號的話--->就是報錯啦:
File "/usercode/file.py", line 1
def function1(str)
^
SyntaxError: invalid syntax
②在C++中一般自定義函數的時候,格式都是--》類型 函數名(類型 變量名1,類型 變量名2……)這樣;但是在Python中,自定義函數一定要加上def(個人猜測是 Define Function 類似的意思吧)。但是呢,括號內到還放的是變量名。
③再有,就是那個return了,哪兒都有……也是絕了。
從上面的例子裏,只能看出上面上面三點。再看下面的例子:(原來寫過一篇A+B的文章,雖然可以直接用sum函數,但是自己寫一個也無傷大雅不是)
def sum( arg1, arg2 ):
# 返回2個參數的和."
total = arg1 + arg2
return total;
# 調用sum函數
total = sum( 10, 20 );
print ("10 + 20 = ", total)
說到這裏,有不得不提起形參和實參了(考試之前背書背到絕望)。在C++中,有關形參和實參提到了很多,這裏就簡單提兩句。比如:單向傳遞,地址傳遞etc.不一而足。但是呢,在這裏還想再附一段Python的代碼,再次說明這個問題:
def function2(a):
a=10
return a
b=2
function2(b)
print(b)
輸出:
2
由此引出☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☞☟☟☟☟☟☟☟☟☟☟☟
可更改(mutable)與不可更改(immutable)對象
在 python 中,strings, tuples, 和 numbers 是不可更改的對象,而 list,dict 等則是可以修改的對象。
-
不可變類型:變量賦值 a=5 後再賦值 a=10,這裏實際是新生成一個 int 值對象 10,再讓 a 指向它,而 5 被丟棄,不是改變a的值,相當於新生成了a。
-
可變類型:變量賦值 la=[1,2,3,4] 後再賦值 la[2]=5 則是將 list la 的第三個元素值更改,本身la沒有動,只是其內部的一部分值被修改了。
python 函數的參數傳遞:
-
不可變類型:類似 c++ 的值傳遞,如 整數、字符串、元組。如fun(a),傳遞的只是a的值,沒有影響a對象本身。比如在 fun(a)內部修改 a 的值,只是修改另一個複製的對象,不會影響 a 本身。
-
可變類型:類似 c++ 的引用傳遞,如 列表,字典。如 fun(la),則是將 la 真正的傳過去,修改後fun外部的la也會受影響
python 中一切都是對象,嚴格意義我們不能說值傳遞還是引用傳遞,我們應該說傳不可變對象和傳可變對象。
------------------這裏是分割線,以上寫於2018/1/25------------------