0. 請問以下哪個是形參哪個是實參?
- def MyFun(x):
- return x ** 3
- y = 3
- print(MyFun(y))
x是形式參數(形參),y是實際參數(實參)。
跟絕大部分編程語言一樣,形參指的是函數創建和定義過程中小括號里的參數,而實參指的是函數在調用過程中傳遞進去的參數。
1. 函數文檔和直接用“#”為函數寫注釋有什么不同?
給函數寫文檔是為了讓別人可以更好的理解你的函數,所以這是一個好習慣:
- >>> def MyFirstFunction(name):
- '函數文檔在函數定義的最開頭部分,用不記名字符串表示'
- print('I love FishC.com!')
我們看到在函數開頭寫下的字符串Ta是不會打印出來的,但Ta會作為函數的一部分存儲起來,這個我們稱之為函數文檔字符串,Ta的功能跟注釋是一樣的。
函數的文檔字符串可以按如下方式訪問:
- >>> MyFirstFunction.__doc__
- '函數文檔在函數定義的最開頭部分,用不記名字符串表示'
另外,我們用help()來訪問這個函數也可以看到這個文檔字符串:
- >>> help(MyFirstFunction)
- Help on function MyFirstFunction in module __main__:
- MyFirstFunction(name)
- 函數文檔在函數定義的最開頭部分,用不記名字符串表示
2. 使用關鍵字參數,可以有效避免什么問題的出現呢?
關鍵字參數,是指函數在調用的時候,帶上參數的名字去指定具體調用的是哪個參數,從而可以不用按照參數的順序調用函數,例如:
- >>> def SaySome(name, words):
- print(name + '->' + words)
- >>> SaySome(words='讓編程改變世界!', name='小甲魚')
使用關鍵字參數,可以有效避免因不小心搞亂參數的順序導致的BUG出現。
3. 使用help(print)查看print()這個BIF有哪些默認參數?分別起到什么作用?
- >>> help(print)
- Help on built-in function print in module builtins:
- print(...)
- print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
-
- Prints the values to a stream, or to sys.stdout by default.
- Optional keyword arguments:
- file: a file-like object (stream); defaults to the current sys.stdout.
- # 文件類型對象,默認是sys.stdout(標准輸出流)
- sep: string inserted between values, default a space.
- # 第一個參數如果有多個值(第一個參數是收集參數),各個值之間默認用空格(space)隔開
- end: string appended after the last value, default a newline.
- # 打印最后一個值之后默認參數一個新行標識符(‘\n’)
- flush: whether to forcibly flush the stream.
- # 是否強制刷新流
4. 默認參數和關鍵字參數表面最大的區別是什么?
呃,其實這道題考大家有沒有認真聽課啦~
關鍵字參數是在函數調用的時候,通過參數名制定需要賦值的參數,這樣做就不怕因為搞不清參數的順序而導致函數調用出錯。而默認參數是在參數定義的過程中,為形參賦初值,當函數調用的時候,不傳遞實參,則默認使用形參的初始值代替。
動動手答案:
本帖隱藏的內容
0. 編寫一個符合以下要求的函數:
a) 計算打印所有參數的和乘以基數(base=3)的結果
b) 如果參數中最后一個參數為(base=5),則設定基數為5,基數不參與求和計算。
- def mFun(*param, base=3):
- result = 0
- for each in param:
- result += each
- result *= base
-
- print('結果是:', result)
- mFun(1, 2, 3, 4, 5, base=5)
1. 尋找水仙花數
題目要求:如果一個3位數等於其各位數字的立方和,則稱這個數為水仙花數。例如153 = 1^3+5^3+3^3,因此153是一個水仙花數。編寫一個程序,找出所有的水仙花數。
- def Narcissus():
- for each in range(100, 1000):
- temp = each
- sum = 0
- while temp:
- sum = sum + (temp%10) ** 3
- temp = temp // 10 # 注意這里用地板除
- if sum == each:
- print(each, end='\t')
- print("所有的水仙花數分別是:", end='')
- Narcissus()
2. 編寫一個函數 findstr(),該函數統計一個長度為 2 的子字符串在另一個字符串中出現的次數。例如:假定輸入的字符串為“You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.”,子字符串為“im”,函數執行后打印“子字母串在目標字符串中共出現 3 次”。
- def findStr(desStr, subStr):
- count = 0
- length = len(desStr)
- if subStr not in desStr:
- print('在目標字符串中未找到字符串!')
- else:
- for each1 in range(length-1):
- if desStr[each1] == subStr[0]:
- if desStr[each1+1] == subStr[1]:
- count += 1
-
- print('子字符串在目標字符串中共出現 %d 次' % count)
- desStr = input('請輸入目標字符串:')
- subStr = input('請輸入子字符串(兩個字符):')
- findStr(desStr, subStr)
3. 請寫下這一節課你學習到的內容:格式不限,回憶並復述是加強記憶的好方式!