tags: Python
Learning
Note
1. `callabel()`可以测试函数能否调用。(返回True/False)(3.0得用`hasattr(func, __cal__)`代替)
2. 使用`def`语句定义函数
def
语句后面,称为文档字符串。help
得到关于函数的信息,包括文档字符串。return
起到结束函数的作用。*+参数名
收集其余的位置参数为一个元组。(没有就是一个空元组)**+参数名
收集有关键字的参数,得到一个字典。
普通参数和关键字参数可以联合使用。
def add(x, y): return x + y
params = (1, 2)
add(*params)
同样字典也可以用**
翻转vars
函数可以返回这个字典。
scope = vars()
一般来说,vars所返回的字典是不能修改的,结果是未定义的,可能得不到想要的结果
这种“字典”就是作用域。global
访问,如果内外作用域变量名重叠了,可以用globals()[‘parameter‘]
获取。__closure__
属性中。关于闭包具体见这篇博文:Python
学习入门(25)—— 闭包 标准库中的bisect模块可以非常有效地实现二元查找。
“函数式编程”方面的函数:map、filter 和 reduce 函数(3.0中被移到 functools 模块中)lambda
:匿名函数。 map
:将序列中的元素全部传递给一个函数。list(map(str,range(10)))
filter
:基于一个返回布尔值的函数对元素进行过滤。list(filter(lambda
x:x.isalnum(), seq))
reduce
:对一个序列的每个项迭代调用函数。它会将序列的两个元素与给定的函数联合使用,并且将它们的返回值和第3个元素继续联合使用,直到整个序列处理完毕。reduce(lambda
x,y:x+y,numbers)
7.2 类和类型
7.2.2 创建自己的类 在模块或脚本开始的地方放置语句 __metaclass__
= type
表示新式类。
关于
new_sytle class
详见啄木鸟社区的译文:python中的 new-style class 及其实例详解
class语句会在函数定义的地方创建自己的命名空间
self是对于对象自身的引用
如果知道foo是Person的实例的话,还可以把foo.greet()看做Person.greet(foo)方便的简写
claass A(B): ...
,B是A的超类,A是B的子类。 子类正常会重写超类的方法。issubclass
函数:查看一个类是否是另一个的子类。isinstance
函数:检查一个对象是否是一个类的实例。 __bases__
特性:想要知道已知类的基类。__class__
:查看一个对象属于哪个类。type
函数来查看实例的类。hasattr(obj, ‘method‘)
callable(getattr(obj, ‘method‘, None))
(在3.0中可以使用hasattr(x,
‘__call__‘)
来代替callable(x)
)__dict__
特性:查看对象内所以存储的值。dir(exceptions)
查看内建的异常。(需要import
exceptions
) class SomeCustomException(Exception): pass
try/except 异常
实现。
如果没有捕捉到异常,它会被“传播”到调用的函数中。如果那里依然没有捕获,这写异常就会“浮”到程序的最顶层。
如果要传递异常,可以使用raise
try/expect 异常
可以附带多个expecttry/expect (...)
将异常作为元组放进去try/ except (...), e
(3.0是 as
e
)try/ expect
可以捕捉全部异常。
注意:这样捕捉所有异常是危险的,因为它会隐藏所有程序员未想到并且未做好准备处理的错误。使用except Exception,e会更好,或者对异常对象e进行一些检查
try /expect /else
进行没有异常情况的处理。while True: # 如果出错必须重新输入,否则无法跳出循环
try:
x=input(‘Enter the first number: ‘)
y=input(‘Enter the second number: ‘)
print(int(x)/int(y))
except Exception as e : # 如果出错了,打印错误信息
print(e)
print(‘Invalid input,please try again‘)
else: # 计算过程没有异常,跳出
break
try/except/else/finally
:无论是否发生异常情况,都需要执行一些清理工作。(如通信过程)if/else
效率快。原文:http://blog.csdn.net/hcbbt/article/details/18798973