Python学习笔记(八):常用语法

      • 一、基本语法
            • 1. 编码声明
            • 2. 垃圾收集
      • 二、内建类型
            • 1. 真值测试
            • 2. 布尔运算
            • 3. 比较
            • 4. 整数类型的位操作
      • 三、简单语句
            • 1. 条件语句
            • 2. for 循环
            • 3. while 循环
            • 4. break 语句
            • 5. continue 语句
            • 6. pass 语句
      • 四、函数式编程工具
            • 1. filter()
            • 2. map()
            • 3. lambda表达式
            • 4. 赋值语句的特殊技巧
            • 5. 收集参数
      • 五、异常
            • 1. 一些内建异常
            • 2. 处理异常
            • 3. 触发异常
            • 4. 自定义异常类
      • 六、模块
            • 1. 引入模块
            • 2. __name__
            • 3. dir()函数
      • 七、其他内建函数(未完,待续)

一、基本语法

1. 编码声明
'''
# -*- coding:  -*-
# vim:fileencoding=
'''

# 如:
# -*- coding: utf-8 -*-
2. 垃圾收集

      一般来说,Python会删除那些不再使用的对象(因为使用者不会再通过任何变量或者数据结构引用它们)。例如将某名字绑定的值设为None,其原本绑定的值会“漂”在内存里面,没有任何名字绑定到它上面。没有办法获取和使用它,所以Python解释器会直接删除该值,这种行为被称为垃圾收集。
      另一个方法就是使用 del 语句。使用 del 删除的只是名称,而不是值。事实上,在Python是没办法删除值的(也不需要过多考虑删除值的问题,因为在某个值不再使用的时候,Python解释器会负责内存的回收)。



二、内建类型

1. 真值测试

以下值被视为False
① None
② False
③ 任何数值类型的零,例如,0、 0L、0.0、 0j。
④ 任何空的序列,例如, ‘’、 ()、 []。
⑤ 任何空的映射,例如,{}。
⑥ 用户定义的类的实例,如果该类定义一个__nonzero__()或__len__()的方法,在该方法返回整数零或布尔值False时

'''
bool(val)
val被视为 False 则返回 False ,否则返回 True
'''

import math
bool(None)      # False
bool(0j)        # False
bool()          # False
bool({})        # False
bool(math.nan)  # True
2. 布尔运算
操作 含义 结果
x or y 如果x为假,那么返回y,否则返回x 0 or 2 输出结果:2
x and y 如果x为假,那么返回x,否则返回y 0 and 2 输出结果:0
not x 如果x为假,那么返回True,否则返回False not 1 输出结果:False
3. 比较
操作 含义 结果
< 严格地小于 1 < 2 输出结果:True
<= 小于或等于 1 <= 2 输出结果:True
> 严格地大于 1 > 2 输出结果:False
>= 大于或等于 1 >= 2 输出结果:False
== 等于 1 == 2 输出结果:False
!= 不等于 1 != 2 输出结果:True
is 对象ID是否相同 a = b = 1,a is b 输出结果:True
is not 对象ID是否不同 a = b = 1,a is not b 输出结果:False
4. 整数类型的位操作

原码:第一位表示符合(1为负0为正),其余位表示值
反码:正数的反码即原码,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反
补码:正数的补码即原码,负数的补码是在反码的基础上+1

[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
操作 含义 结果
x | y x和y的(补码)按位或(有1为1,其余为0) 0 | 1 = 1,0 | -1 = -1
x ^ y x和y的(补码)按位异或(两数相同结果为0,相异结果为1) 0^1 = 1
x & y x和y的(补码)按位与(有0为0,其余为1) 0 & 1 = 0,0 & -1 = 0
x << n x(补码)左移n位,右边缺少的补0 1 << 2 = [100]补 = 4,-1 << 2 = [11111100]补 = -4
x >> n x(补码)右移n位,左边缺少的地方补符号位(即正数补0,负数补1) 1 >> 2 = 0,-1 >> 2 = [11111111]补 = -1
~x x(补码)按位取反 ~1 = [11111110]补 = -2


三、简单语句

1. 条件语句
if 判断条件1:
    执行语句1……
elif 判断条件2:
    执行语句2……
elif 判断条件3:
    执行语句3……
else:
    执行语句4……
2. for 循环
for var in sequence:
   执行语句……
   
for var in sequence:
   执行语句1……
else:
   执行语句2……

for 循环可使用 else 语句,在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样。

3. while 循环
while 判断条件:
    执行语句……

while 判断条件:
    执行语句1……
else:
   执行语句2……
4. break 语句

break语句和C中的类似,用于跳出最近的 for 或 while 循环。

5. continue 语句

continue语句和C中的类似,表示继续下一次迭代。

6. pass 语句

pass语句什么也不做。它用于语法上必须要有一条语句,但程序什么也不需要做的场合。它通常用于创建最小的类。



四、函数式编程工具

1. filter()

filter(function, sequence)返回的序列由 function(item) 结果为真的元素组成。如果sequence是一个字符串或元组,结果将是相同的类型;否则,结果将始终是一个列表。

def f(x): return x > 0
list(filter(f, range(-2,3)))               # [1, 2]
2. map()

map(function, sequence) 为序列中的每一个元素调用 function(item) 函数并返回结果的列表。可以传入多个序列;此时,传入的函数也必须要有和序列数目相同的参数,执行时会依次用各序列上对应的元素来调用函数(如果某个序列比另外一个短,就用 None 代替)。

def f(x, y): return x*2-y
list(map(f, range(-2,3), range(1, 6)))     # [-5, -4, -3, -2, -1]
3. lambda表达式

可以使用lambda关键字创建小的匿名函数。语法:lambda [arg1 [,arg2,…argn]]:expression

list(filter(lambda x : x > 0, range(-2,3)))              # [1, 2]
list(map(lambda x, y : x*2-y, range(-2,3), range(1, 6))) # [-5, -4, -3, -2, -1]
4. 赋值语句的特殊技巧
# 序列解包
x, y, z = 1, 2, 3
x, y, z       # (1, 2, 3)
x, y = y, x
x, y, z       # (2, 1, 3)

# 链式赋值
x = y = somefunction()
# 等价于
y = somefunction()
x = y
5. 收集参数
'''
指定一个加星号的参数,参数前的星号将所有值放置在一个元组中
'''
def print_params(*params):
    print params

print_params('params')      # ('params',)
print_params(1, 2, 3)       # (1, 2, 3)

'''
可以跟参数联合使用
'''
def print_params(title, *params):
    print title, params
    
print_params(1, 2, 3)        # 1 (2, 3)

'''
指定一个加两个星号的参数,参数前的星号将所有值放置在一个元组中,指定关键字的保存在字典中
'''
def print_params(title, *params1, **params2):
    print title, params1, params2

print_params('params')       # params () {}
print_params(1, 2, 3)        # 1 (2, 3) {}
print_params('title', x = 1, y = 2, z = 3) # title () {'y': 2, 'x': 1, 'z': 3}

'''
反转
'''
def add(x, y):
    return x + y

params = (1, 2)
add(*params)                # 3

def print_params(**params):
    print params['width'], params['height']

params = {'width': 10, 'height': 20}
print_params(**params)      # 10 20


五、异常

1. 一些内建异常
类名 描述
Exception 所有异常的基类
AttributeError 特性引用或赋值失败时引发
IOError 试图打开不存在文件(包括其他情况)时引发
IndexError 在使用序列中不存在的索引时引发
KeyError 在使用映射中不存在的键时引发
NameError 在找不到名字(变量)时引发
SyntaxError 在代码为错误形式时引发
TypeError 在内建操作或者函数应用于错误类型的对象时引发
ValueError 在内建操作或者函数应用于正确类型的对象但是该对象使用不合适的值时引发
ZeroDivisionError 在除法或者模除操作的第二个参数为0时引发
2. 处理异常
'''
捕捉异常可以使用try/except语句。
try/except 语句用来检测 try 语句块中的错误,从而让 except 语句捕获异常信息并处理。
try:
    <语句>        # 运行别的代码
except :
    <语句>        # 如果在try部份引发了'name'异常,name可以是元组(指定多个异常)
except  as :
    <语句>        # 如果引发了'name'异常,获得附加的数据msg
else:
    <语句>        # 如果try语句没有异常发生,else语句会被执行
'''

'''
try/finally 语句无论是否发生异常都将执行最后的代码。
如果需要确保某些代码不管是否有异常引发都要执行,那么这些代码可以放置在 finally 子句中。
try:
    <语句>
finally:
    <语句>    #退出try时总会执行
'''

try:
    a = 1/0
    print('right')
except (ZeroDivisionError, IOError) as msg:
    print('error:', msg)
else:
    print('else')
finally:
    print('finally')
# 输出:
# error: division by zero
# finally
3. 触发异常

我们可以使用raise语句自己触发异常。

def f( x ):
    if x < 1:
        raise Exception("low x!")
        # 触发异常后,后面的代码就不会再执行

try:
    f(0)# 触发异常
except Exception as msg:
    print('error:', msg)
else:
    print('else')
# 输出:error: low x!
4. 自定义异常类

可以通过创建一个新的异常类来拥有自己的异常。异常类继承自 Exception 类,可以直接继承,或者间接继承

class MyError(Exception):
        def __init__(self, value):
            self.value = value
        def __str__(self):
            return repr(self.value)

try:
   raise MyError(2*2)
except MyError as e:
    print('error:', e.value)
# 输出:error: 4

raise MyError('oops!')
# 报错:__main__.MyError: 'oops!'


六、模块

1. 引入模块
import module
from module import somefunction
form module import *
import module as name
2. name

在模块里面,模块的名字(是一个字符串)可以由全局变量 name 的值得到。

import numpy
numpy.__name__  # 'numpy'
__name__        # '__main__'
3. dir()函数

内置函数 dir() 用来找出模块中定义了哪些名字。它返回一个排好序的字符串列表。

dir() # ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']


七、其他内建函数(未完,待续)

你可能感兴趣的:(Python学习笔记)