Python学习笔记

从今年2月中旬开始一直在看《Learning Python》这本书,现在看到了第四部分。感觉这本书讲的很详细,有点像在认真学习语言的那种感觉。不过总感觉时间不够用,感觉自己不再是naive的学生了…

  • Python使用#作为注释,没有语法上的多行注释,但是可以通过【长字符串】把脚本变成字符串。即在开头结尾分别加上'''

  • Python2里print是语句,Python3里是函数

  • Python里所有变量本质上都是引用,包括数字和字符串变量。

  • 在常见类型中,数字、字符串是不可变的对象。对字符串或数字进行的操作会生成一个新的对象,并返回其引用。因此,python中不存在a++这样的语法。

  • Python中的字符串格式化为:

    1
    2
    "Good {}, Mr. {}".format("Morning","Kirito")
    "{1} and {0} are good friends.".format("Kim","Trump")
  • True和False只是1和0,即True==1或者False==0的结果都是True。所有空的容器都是False。

  • list()是列表, dict()是字典(即C++里面的map或者lua里的table)

  • 列表解析

    1
    2
    3
    4
    5
    6
    7
    8
    lst=[x for x in range(10)] # also lst=list(range(10))
    print(lst) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    lst=[x**2 for x in range(10)] # pow(x,2)
    print(lst) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

    lst=[x**2 for x in range(10) if x%2==1] # with condition
    print(lst) # [1, 9, 25, 49, 81]
  • 列表分片

    1
    2
    3
    lst=[x**2 for x in range(10)]
    print(lst[0:3]) # [0, 1, 4]
    print(lst[1:8]) # [1, 4, 9, 16, 25, 36, 49]

    列表分片会产生一个新列表,对新列表增删不会影响到原列表,但是新列表中的引用仍然和旧列表中相同。这意味着如果通过新列表中成员引用修改值,会影响到旧列表中对应引用的值。(相当于修改了指针的地址空间实际内容,从而让所有指针读出来的内容看起来都被修改了)

  • 列表分片赋值

    1
    2
    3
    lst=[x**2 for x in range(10)] # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    lst[1:3]=['?','x','y','z']
    print(lst) # [0, '?', 'x', 'y', 'z', 9, 16, 25, 36, 49, 64, 81]

    相当于lst[1:3]被删除后在此处填入右侧的列表

  • Python3中除法 / 会尽可能产生小数,使用整除法 // 来产生整数。

  • Python通过缩进区分代码块. 在每个切换缩进开始的语句经常会附带冒号:. 例如:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    while True:
    pass

    def func(a,b):
    raise Exception("Ahh... are you ok?")

    if True:
    pass
    elif False:
    pass
    else:
    pass

    try:
    func(1,2)
    except Exception as e:
    print("Exception: {}".format(e))
    except:
    print("Unexcepted!")
    else:
    print("Nothing happened.")
    finally:
    print("Oh you will do this.")
  • Python函数参数可以附带默认值,传入参数时可使用形参变量名指定

    1
    2
    3
    4
    5
    6
    7
    def someFunc(a,b,name=None,place=None):
    print(a,b,name,place)

    someFunc(1,2,name="God",place="Haven")
    someFunc(1,2,name="nobody")
    someFunc(1,2,place="nowhere")
    someFunc(1,2)

    某种意义上,也可以传入足够数量的参数对someFunc进行调用而不写明变量对应关系,但这是不推荐的。

  • 三目运算符

    1
    "I love you" if YouLoveMe() else "I hate you"