學習歷程按照Github上jackfrued的100天學習python的進度來進行胞谈,再輔上一些自己查找的相關資料阱当。
對應傳送門:https://github.com/jackfrued/Python-100-Days/tree/master/
Day05 構造程序邏輯
1.在python中留攒,/代表浮點數除法,//代表整數除法
2.python求冪方法:(1) math模塊中的pow函數 (2) 使用**運算符(*為乘法,**為乘方)
"*"和"**"的其它定義:https://blog.csdn.net/liuxingen/article/details/50113923 (Python的星號(*白魂、**)的作用)
Day06 函數和模塊的使用
1.python沒有函數重載的功能
2.python使用關鍵字def來定義函數,例子
def factorial(num):
"""
求階乘
:param num: 非負整數
:return: num的階乘
"""
result = 1
for n in range(1, num + 1):
result *= n
return result
(注:python中自帶的求階乘friction函數在math模塊內)
- python函數的參數可以有默認值上岗,當調用該函數的時候如果沒有傳入對應參數的話會直接使用參數的默認值福荸。例子:
from random import randint
def roll_dice(n=2):
"""
搖色子
:param n: 色子的個數
:return: n顆色子點數之和
"""
total = 0
for _ in range(n):
total += randint(1, 6)
return total
def add(a=0, b=0, c=0):
return a + b + c
# 如果沒有指定參數那么使用默認值搖兩顆色子
print(roll_dice())
# 搖三顆色子
print(roll_dice(3))
print(add())
print(add(1))
print(add(1, 2))
print(add(1, 2, 3))
# 傳遞參數時可以不按照設定的順序進行傳遞
print(add(c=50, a=100, b=200))
- 當函數的參數不確定時,可以采用可變參數*args肴掷,可變參數*args相當于一個元組敬锐,具體例子:
def add(*args):
total = 0
for val in args:
total += val
return total
print(add())
print(add(1))
print(add(1, 2))
print(add(1, 2, 3))
print(add(1, 3, 5, 7, 9))
- 如果在同一個.py文件中定義了兩個同名函數的話,由于Python沒有函數重載的概念呆瞻,那么后面的定義會覆蓋之前的定義台夺,也就意味著兩個函數同名函數實際上只有一個是存在的。為了避免這一狀況痴脾,我們可以在不同模塊中定義它們颤介。(Python中每個文件就代表了一個模塊(module))在使用函數的時候我們通過import關鍵字導入指定的模塊就可以區(qū)分到底要使用的是哪個模塊中的foo函數,代碼如下所示。
module1.py
def foo():
print('hello, world!')
module2.py
def foo():
print('goodbye, world!')
test.py
from module1 import foo
# 輸出hello, world!
foo()
from module2 import foo
# 輸出goodbye, world!
foo()
也可以按照如下所示的方式來區(qū)分到底要使用哪一個foo函數滚朵。
test.py
import module1 as m1
import module2 as m2
m1.foo()
m2.foo()
6.當導入的模塊中有可執(zhí)行代碼的時候冤灾,python會執(zhí)行對應的代碼,所以為了避免這種情況辕近,可以對里面的可執(zhí)行代碼放入模塊判斷的條件中韵吨,只有當該模塊為主運行模塊的時候才會進行運行。
__name__是Python中一個隱含的變量它代表了模塊的名字
只有被Python解釋器直接執(zhí)行的模塊的名字才是__main__
module3.py
def foo():
pass
def bar():
pass
# __name__是Python中一個隱含的變量它代表了模塊的名字
# 只有被Python解釋器直接執(zhí)行的模塊的名字才是__main__
if __name__ == '__main__':
print('call foo()')
foo()
print('call bar()')
bar()
test.py
import module3
# 導入module3時 不會執(zhí)行模塊中if條件成立時的代碼 因為模塊的名字是module3而不是__main__
- Python的函數里面可以再定義函數
- 為了減少全局變量的使用(global全局變量使用過多可能會發(fā)生意料之外的修改和使用以及可能導致對象占用的內存長時間無法被垃圾回收)亏推,降低代碼之間的耦合度学赛,這就意味著應該盡量讓變量的作用域在函數的內部,因此主函數可以按照下面方法進行書寫:
def main():
# Todo: Add your code here
pass
if __name__ == '__main__':
main()
- python中的變量作用域:Python查找一個變量時會按照“局部作用域”吞杭、“嵌套作用域”盏浇、“全局作用域”和“內置作用域”的順序進行搜索
def foo():
b = 'hello'
def bar(): # Python中可以在函數內部再定義函數
c = True
print(a)
print(b)
print(c)
bar()
# print(c) # NameError: name 'c' is not defined
if __name__ == '__main__':
a = 100
# print(b) # NameError: name 'b' is not defined
foo()
在上述代碼中,對bar函數而言芽狗,a為全局作用域绢掰,b為嵌套作用域,c為局部作用域童擎。
(對應鏈接:https://github.com/jackfrued/Python-100-Days/blob/master/Day01-15/06.%E5%87%BD%E6%95%B0%E5%92%8C%E6%A8%A1%E5%9D%97%E7%9A%84%E4%BD%BF%E7%94%A8.md)