zoukankan      html  css  js  c++  java
  • Python基础总结

    包裹和解包裹,并不是相反操作,是两个独立的过程。参考 ref 里的包裹传递和解包裹。

    包裹传递:
    
    在定义函数时,我们有时候并不知道调用的时候会传递多少个参数。这时候,包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会非常有用。
    
    下面是包裹位置传递的例子:
    
    def func(*name):
        print type(name)
        print name
    
    func(1,4,6)
    func(5,6,7,1,2,3)
     
    
    包裹关键字传递的例子:
    
    def func(**dict):
        print type(dict)
        print dict
    
    func(a=1,b=9)
    func(m=2,n=1,c=11)
    与上面一个例子类似,dict是一个字典,收集所有的关键字,传递给函数func。为了提醒Python,参数dict是包裹关键字传递所用的字典,在dict前加**。
    
    包裹传递的关键在于定义函数时,在相应元组或字典前加*或**。
    
     
    
    解包裹:
    
    *和**,也可以在调用的时候使用,即解包裹(unpacking), 下面为例:
    
    def func(a,b,c):
        print a,b,c
    
    args = (1,3,4)
    func(*args)
    在这个例子中,所谓的解包裹,就是在传递tuple时,让tuple的每一个元素对应一个位置参数。在调用func时使用*,是为了提醒Python:我想要把args拆成分散的三个元素,分别传递给a,b,c。(设想一下在调用func时,args前面没有*会是什么后果?)
    
    相应的,也存在对词典的解包裹,使用相同的func定义,然后:
    
    dict = {'a':1,'b':2,'c':3}
    func(**dict)
    在传递词典dict时,让词典的每个键值对作为一个关键字传递给func。
    
     
    View Code

    总结:

    包裹传递是,函数定义的时候是一个参数(带*的),调用的时候是多个参数;

    解包裹是,函数定义的时候是多个参数,调用的时候是一个参数(带*的,元组)。

    循环对象

    相对于序列,用循环对象的好处在于:不用在循环还没有开始的时候,就生成好要使用的元素。所使用的元素可以在循环过程中逐次生成。这样,节省了空间,提高了效率,编程更灵活。

    生成器的意义?

    关于__name__

    When the Python interpreter reads a source file, it executes all of the code found in it. Before executing the code, it will define a few special variables. For example, if the python interpreter is running that module (the source file) as the main program, it sets the special __name__ variable to have a value "__main__". If this file is being imported from another module, __name__ will be set to the module's name.
    
    refer: http://stackoverflow.com/questions/419163/what-does-if-name-main-do
    View Code

    vamei在blog里也提到了__main__的巧妙用法。

    总之,利用__main__可以区分开一个.py文件是被直接运行的(此时代码里的__name__=__main__),还是被其他.py文件import之后调用的(此时代码里的__name__=调用该模块名)。

    例子:

    有两个.py文件:p9.py和p10.py

    # p9.py
    if __name__ == '__main__':
        print 'this is p9'
    # p10.py
    import p9
    x = 1
    y = 2

    当执行 python p9.py 时,会输出print的内容 “this is p9”。当执行 python p10.py 时,不会输出该内容。

    此时如果在p9.py中输出__name__的话会发现,__name__值即为模块名/文件名:p9

    作为对比,看看将p9.py里的if删去会怎样。删除后的p9.py如下。(p10.py未做改变)

    # p9.py
    print 'this is p9'

    当执行 python p9.py 时,会输出print的内容 “this is p9”。当执行 python p10.py 时,同样会输出“this is p9”。

    此外,还可以参考此文

    使用中文:如果想要在python程序中使用中文,需要在Python程序的第一行加入#coding=utf8

    注释:注释应该和所在的程序块对齐。

    输入:raw_input()和input()

    raw_input() 将所有输入作为字符串看待,返回字符串类型。

    而对于 input() ,它希望能够读取一个合法的 python 表达式,即你输入字符串的时候必须使用引号将它引起来,否则它会引发一个SyntaxError。

    input() 本质上还是使用 raw_input() 来实现的,只是调用完 raw_input() 之后再调用 eval() 函数。

    除非对 input() 有特别需要,否则一般情况下我们都是推荐使用 raw_input() 来与用户交互。

    ref1

    输出:如果想要不换行:

    python 2.x, print 不换行
    >>> print x,
    python 3.x print 不换行
    >>> print(x, end="")

  • 相关阅读:
    详解vue生命周期
    浅谈前端中的mvvm与mvc
    实际项目开发需要注意的tips
    toFixed()一不小心踩了一个坑
    git学习(持续踩坑中🤣)
    webpack基础
    创建git仓库并发布
    注册npm账号
    Invalid left-hand side in assignment
    关于项目中js原型的使用
  • 原文地址:https://www.cnblogs.com/forcheryl/p/5484432.html
Copyright © 2011-2022 走看看