python知识散记(2)

接着上次的知识散记,我们接着看。

闭包

在函数内部定义一个函数,并且这个函数用到了外面的变量。将这个函数以及用到的一些变量称之为闭包。

当某个函数被当成对象返回时,夹带了外部变量,就形成了一个闭包。

PS:这好像和C++不一样,C++是不允许函数嵌套定义的

global:

一般多用在函数内,声明变量的作用域为全局作用域。

nonlocal:

nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量

lambda匿名函数:

不要看匿名函数蛮简单的,其实还是有点注意事项的。对默认参数的赋值只会在函数定义的时候绑定一次。x是一个自由变量。在运行的时候绑定,而不是在定义的时候绑定。执行时,x的值是多少就是多少。如果希望匿名函数可以在定义的时候绑定,并保持值不变,则采用下面方法。

assert:断言

用来直接让程序崩溃,在程序中置入检查点

条件后可以添加字符串,用来解释断言

format:

对*和**的解释:

星号(*)和(**)作为形参的时候是起到“打包”的作用,相反,作为实参的时候是起到“解包”的作用。

星号(*)或(**)作为形参,表示调用可变参数函数:

通过在形参前加一个星号(*)或两个星号(**)来指定函数可以接收任意数量的实参。

从两个示例的输出可以看出:当参数形如 args 时,传递给函数的任意个实参会按位置打包成一个元组(tuple);当参数形如 *args 时,传递给函数的任意个 key = value 实参会被包装进一个字典(dict)。

星号(**)和(*)作为实参时,表示通过解包参数调用函数:

常用内置函数补充:

复数可以通过complex(real,imag)来指定。conjugete提取共轭复数

hasattr:hasattr() 函数用于判断对象是否包含对应的属性。如果对象有该属性返回 True,否则返回 False。

上下文管理器(context manager):

任何实现了__enter__和__exit__方法的对象都可称为上下文管理器

__enter__():方法返回资源对象,这里就是你将要打开的那个文件对象,__exit__()处理一些清除工作。因为File类实现上下文管理器,现在就可以使用with语句了。

实现上下文管理器的其他方法:使用contextmanager装饰器

python的三种修饰符:

staticmethod、classmethod 和 property,作用分别是把类中定义的实例方法变成静态方法、类方法和类属性。staticmethod、classmethod具体看python的类和对象。

注意:

  1. 函数先定义,再修饰它;反之会编译器不认识;

  2. 修饰符“@”后面必须是之前定义的某一个函数;

  3. 每个函数只能有一个修饰符,大于等于两个则不可以。

property有两种用法:

方法当作属性来访问

第一种用法

注意:getnum和setter的顺序,一定getnum在第一个

第二种用法

1
2
3
4
5
6
7
8
9
10
class DataSet(object):
@property
def method_with_property(self): ##含有@property
return 15
def method_without_property(self): ##不含@property
return 15

l = DataSet()
print(l.method_with_property) # 加了@property后,可以用调用属性的形式来调用方法,后面不需要加()。
print(l.method_without_property()) #没有加@property , 必须使用正常的调用方法的形式,即在后面加()

防止属性被修改

1
2
3
4
5
6
7
8
9
10
11
12
13
class DataSet(object):
def __init__(self):
self._images = 1
self._labels = 2 #定义属性的名称
@property
def images(self): #方法加入@property后,这个方法相当于一个属性,这个属性可以让用户进行使用,而且用户有没办法随意修改。
return self._images
@property
def labels(self):
return self._labels
l = DataSet()
#用户进行属性调用的时候,直接调用images即可,而不用知道属性名_images,因此用户无法更改属性,从而保护了类的属性。
print(l.images) # 加了@property后,可以用调用属性的形式来调用方法,后面不需要加()。
----本文结束,感谢您的阅读。如有错,请指正。----
大哥大嫂过年好!支持我一下呗
0%