函数和模块

在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()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容