Exercise 18:命名,變量,代碼,函數

原文鏈接:http://learnpythonthehardway.org/book/ex18.html

        大標題啊,對吧?下面我就要向你介紹關於函數的一些東西了。咚咚鏘!說到函數,每一個程序員會有有不一樣的理解和使用方法,但是現在在這裏我只會教給你最簡單的你能理解的東西。

       函數通常做了三件事情:

1、它們給代碼段命名的方式就和“變量”給字符串和數值命名的方式一樣。

2、它們可以接受參數,就像你的腳本接受 “argv"一樣。

3、通過使用#1 和 #2 可以讓你創建一個”迷你腳本“或者”小命令“。

      在Python 中你可以通過 def 關鍵字來創建一個函數。我打算讓你創建四個函數,它們的作用就像你的腳本一樣,然後我會向你展示這些參數之間的一些關聯。

#this one is like your script with argv
def print_two(*args):
	arg1, arg2 = args
	print "arg1:%r ,arg2:%r" % (arg1 ,arg2)

#ok ,that *args is actually pointless ,we can just do this
def print_two_again(arg1 ,arg2):
	print "arg1:%r ,arg2:%r" % (arg1 ,arg2)

#this just takes one argument
def print_on(arg1):
	print "arg1:%r" % arg1

#this one takes no arguments
def print_none():
	print "I got nothin'."

print_two("Zed" ,"Shaw")
print_two_again("Zed" ,"Shaw")
print_on("First!")
print_none()
       讓我們從第一個函數:print_two 開始入手,因爲它看起來和你已經知道創建的腳本很相似:

1、首先我們用 def 關鍵字來告訴 Python 我想要定義一個函數。

2、在 def 的同一行我們給函數命名了一個名稱。在這裏我們把它命名爲”print_two",但是你也可以將它命名爲“peanuts"。名稱可以任意,但是最好是簡短並且符合函數功能描述。

3、然後我們告訴函數我們需要 *args(asterisk args),這和腳本中的 argv 很相似。參數必須放在()圓括號中纔能有效。

4、接着我們用 : 冒號來結束這一行,並且在下一行縮進。

5、在冒號後面的所有行都進行了四個空格大小的縮進操作,縮進後將與print_two函數名開始的位置對齊。我們縮進的第一行中解析參數就和你腳本中解析參數的操作是一樣的。

6、爲了演示它的工作原理,我們將這些參數都打印出來,就像我們之前在腳本中做的類似。

       現在在print_two函數中的問題就是沒有一種更簡單的方法來創建一個函數。在Ptyon中我們可以跳過所有解析參數的操作,只要直接使用在()中我們想要使用的變量名就可以了。print_two_again 函數就是這樣做的。

       在這之後在名爲print_one的函數中向你展示瞭如何創建只有一個參數的函數的例子。

       最後在名爲print_none的函數它向你演示了一個沒有參數的函數例子。

警告:

       這個警告是非常重要的。如果你現在對這些還不能完全理解也不要泄氣。我們接下來將做更多關於函數的一些練習來教你如何來創建一個函數。現在你只要將我說的”函數“理解成”迷你腳本“就可以了。

輸出結果如下:

如果你運行上面那個腳本的話你可以看到如下結果:
E:\>python ex18.py
arg1:'Zed' ,arg2:'Shaw'
arg1:'Zed' ,arg2:'Shaw'
arg1:'First!'
I got nothin'.
       現在你明白一個函數是怎麼工作的了吧。注意到你使用函數的方式是不是很像之前使用 exists ,open 和其他“命令”的方式。實際上,我之前稱它們爲“命令”是爲了讓你更好的理解,在Python中它們就是函數。這就意味着你也可以自己來寫命令然後在腳本中使用它。

研究訓練:

        爲自己寫一個函數注意事項以供後續參考。你可以寫在一個索引卡片上隨時閱讀,直到你記住所有的要點爲止。注意事項如下:
1、函數定義是由 def 開始的嗎?
2、你的函數名是否只包含字符和_(下劃線)字符?
3、在函數名後面是否緊跟着打開圓括號 ( ?
4、在圓括號(後面的參數是否用逗號隔開了?
5、每一個參數名稱是否唯一(意思就是沒有重複的參數名稱)?
6、你是否在緊跟着參數後面寫了關閉圓括號和冒號 ):?
7、緊跟着函數定義的代碼所在的行是否進行了4個空格符的縮進操作?不多也不少。
8、函數結束的位置是否取消了縮進 (“dedent”)?

然後當我們運行(使用 或者 調用)一個函數時,檢查下面這些事情:
1、調用函數時是否使用了函數名稱?
2、調用函數時是否在函數命名後面加了 ( 字符。
3、輸入圓括號中的參數值是否用逗號分隔了?
4、調用函數是否以 ) 結尾。

在剩下的課程中使用這兩個列表來檢查函數的使用直到你完全熟悉爲止。
最後,將下面這句話閱讀幾遍:
“運行函數”、“調用函數”、“使用函數“是同一個意思。

學生遇見的常見問題:


函數名允許使用什麼字符?
答:和變量的命名規則一樣,函數名由字母,數字和下劃線組成,但是首字母不可以是數字。

*args 中的*是什麼作用?
答:* 是來告訴 Python 將函數得到的所有參數作爲一個字符串列表放在args中。就像你使用過的 argv 一樣。除了一些特別需要這種形式通常是比較少使用的。

這些練習讓人感覺真的很枯燥無聊。
答:這是好現象,這說明你在寫代碼和理解代碼的能力越來越好了。你可以有目的性的改變所有我告訴你輸入的代碼來減少這種枯燥無聊的感覺。
發佈了23 篇原創文章 · 獲贊 7 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章