在Python中,函數(shù)的參數(shù)可以有默認(rèn)值,也支持使用可變參數(shù)蛙紫,所以Python并不需要像其他語(yǔ)言一樣支持函數(shù)的重載劈猪,因?yàn)槲覀冊(cè)诙x一個(gè)函數(shù)的時(shí)候可以讓它有多種不同的使用方式
傳遞參數(shù)時(shí)可以不按照設(shè)定的順序進(jìn)行傳遞
def add(*args):
在參數(shù)名前面的 * 表示args是一個(gè)可變參數(shù)
1.兩個(gè)文件(每個(gè)文件代表一個(gè)模塊)含有同名函數(shù)
-
from module1 import foo
然后調(diào)用,就是調(diào)用module1中的foo函數(shù) -
import module1 as m1
然后用m1.foo()
調(diào)用module1中的foo函數(shù)
如果一個(gè)模塊中foo( )函數(shù)之后還有其他代碼塊命黔,給這代碼塊加
if __name__ == '__main__':
a.__name__
是Python中一個(gè)隱含的變量它代表了模塊的名字
b. 只有被Python解釋器直接執(zhí)行的模塊的名字才是main
2.Python查找一個(gè)變量時(shí)會(huì)按照局部作用域 => 嵌套作用域 =>全局作用域 =>內(nèi)置作用域
的順序進(jìn)行搜索
- 全局作用域用
global
- 嵌套作用域
nonlocal
3.屬性的公私
- 私有 給屬性命名時(shí)前面加兩個(gè)"_"
class Test:
def __init__(self, foo):
self.__foo = foo #self.foo=foo
def __bar(self):
print(self.__foo)
print('__bar')
但是呜呐,Python并沒(méi)有從語(yǔ)法上嚴(yán)格保證私有屬性或方法的私密性,它只是給私有的屬性和方法換了一個(gè)名字來(lái)妨礙對(duì)它們的訪問(wèn)悍募,事實(shí)上如果你知道更換名字的規(guī)則仍然可以訪問(wèn)到它們蘑辑,下面的代碼就可以驗(yàn)證這一點(diǎn)。之所以這樣設(shè)定坠宴,可以用這樣一句名言加以解釋?zhuān)褪?We are all consenting adults here"洋魂。因?yàn)榻^大多數(shù)程序員都認(rèn)為開(kāi)放比封閉要好,而且程序員要自己為自己的行為負(fù)責(zé)喜鼓。
class Test:
def __init__(self, foo):
self.__foo = foo
def __bar(self):
print(self.__foo)
print('__bar')
def main():
test = Test('hello')
test._Test__bar() # 注意這里
print(test._Test__foo)
if __name__ == "__main__":
main()