在Python中,函数的参数可以有默认值,也支持使用可变参数,所以Python并不需要像其他语言一样支持函数的重载,因为我们在定义一个函数的时候可以让它有多种不同的使用方式
传递参数时可以不按照设定的顺序进行传递
def add(*args):
在参数名前面的 * 表示args是一个可变参数
1.两个文件(每个文件代表一个模块)含有同名函数
-
from module1 import foo
然后调用,就是调用module1中的foo函数 -
import module1 as m1
然后用m1.foo()
调用module1中的foo函数
如果一个模块中foo( )函数之后还有其他代码块,给这代码块加
if __name__ == '__main__':
a.__name__
是Python中一个隐含的变量它代表了模块的名字
b. 只有被Python解释器直接执行的模块的名字才是main
2.Python查找一个变量时会按照局部作用域 => 嵌套作用域 =>全局作用域 =>内置作用域
的顺序进行搜索
- 全局作用域用
global
- 嵌套作用域
nonlocal
3.属性的公私
- 私有 给属性命名时前面加两个"_"
class Test:
def __init__(self, foo):
self.__foo = foo #self.foo=foo
def __bar(self):
print(self.__foo)
print('__bar')
但是,Python并没有从语法上严格保证私有属性或方法的私密性,它只是给私有的属性和方法换了一个名字来妨碍对它们的访问,事实上如果你知道更换名字的规则仍然可以访问到它们,下面的代码就可以验证这一点。之所以这样设定,可以用这样一句名言加以解释,就是"We are all consenting adults here"。因为绝大多数程序员都认为开放比封闭要好,而且程序员要自己为自己的行为负责。
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()