上接上一篇随笔《Python入门基础知识学习笔记之一》。
因为学习Python入门基础知识时,记录的比较较多,为了以后方便查看,我觉得分开两篇随笔作记录,较为妥当。
进入正题。
16. Python中高阶函数之修饰器的应用:
(以下展示代码,代码在Mac中)
17. 高阶函数的应用中,对列表进行排序的函数又sort和sorted两个。
它们的共同点是两者默认直接比较列表中元素的值大小,也可以通过传入'key'参数表示用其它方式作比较。
它们的不同点:
sort函数是给列表对象直接调用的,且排序后原列表中元素的顺序是跟随变化的。代码如下所示:
List.sort(key=len)
sorted函数,则是把要排序的对象以参数的形式传入,且排序后,原列表中元素的顺序并不会跟随变化,代码示例如下:
sorted(List,key=int)
18. 相比较于Objective-C,很多语言都有匿名函数的概念。而我对这个概念的理解还不够深刻,暂时用代码记录其简单的应用场景:
#用法一:简化函数定义 #一般的函数定义如: def func(a, b): return a+b #而用匿名函数可以简化为: funcxx = lambda a,b : a+b #或者 (lambda a, b : a+b)(10+20) #用法二:作为参数传递 thing = fillter(lambda i : i<5, someList) #表示筛选出someList列表中大于5的元素。
19. Python中的闭包:
在Objective-C中也是没有闭包的概念的(噢,天啊,我懂的知识真少)。闭包可以隐藏函数内部调用的变量,保证内部的数据不会被其它的函数修改。Python中的闭包是一种以函数作为返回值的高阶函数。其中,它需要满是以下3个条件:
1)定义一个有嵌套内部函数的函数。
2)该内部函数必须有返回值。
3)内部函数必须要有用到其外部的变量。
#代码示例 def make_average(): nums = [] #不会被外部其它函数修改的变量 def average(n): nums.append(n) return sum(nums)/len(nums) return average #用一个变量接收闭包 average = make_average() #使用闭包 print(average(10)) #10 print(average(20)) #15
20. Python中,类里面定义方法是,至少要有一个形参(通常是self)。因为解析器在解析代码时会自动传入该类的示例对象作为第一个参数。
21. Python中,类的getter和setter方法一般表示如下:
def get_xxx(self): return self._xxx def set_xxx(self, xx): self._xxx = xx
22. Python类中的隐藏属性会以"__"双下滑线开头,一般方式下外部是访问不到的,但是也可以用"_类名__xxx"的方式强制访问。因此约定用"_"单下滑线开头来修饰私有属性,外部不用直接修改。
23. Python中,类生成实例化对象时,其内部执行过程是:先生成类内部的变量,再生成如"__init__"之类的特殊方法。
24. Python中,类用property装饰器来修饰get方法之后,就可以像调用类属性那样用点语法来调用对应的get方法。但对应的get方法必须和属性名一致。set方法同理。示例如下:
@property def name(self) print('get方法执行了') return self._name @name.setter def name(self, name) print('setter方法执行了') self._name = name
25. 对于多态,我的理解是:子类可以根据特定的情况重写父类方法,以展示不同的代码逻辑,并达到多样化。
26. Python多继承中,如果父类中有同名的方法,则前边父类的方法会覆盖后边父类的方法。
27. "类名.__base__"的形式可以用以获取当前类的所有父类。
28. Python中,实例属性或方法和静态属性或方法的区分度不高,具体代码示例如下:
class ClassName(object): """docstring for ClassName""" count = 1 def __init__(self): super(ClassName, self).__init__() self.name = 'qqq' #对象方法 def func1(self): print('func1') #类方法 @classmethod def func2(cls): print('func2') #静态方法 @staticmethod def func3(): print('func3') a = ClassName() print(a.count) print(ClassName.count) ClassName.count = 3 print(a.count) a.count = 4 print(a.count) a.name = 'wwww' ClassName.name = 'iiii' a.func1() ClassName.func1(a) #这个会报错:func1() missing 1 required positional argument: 'self' a.func2() ClassName.func2() a.func3() ClassName.func3()
29. Python中,将对象赋值"None"或者"del"对象都会触发垃圾回收机制(垃圾回收机制的知识超出本文范围,待以后深入学习)。
30. Python中,捕获异常和抛出异常的语法如下:
#捕获异常 try: xxx except xx as oo: print(oo) else: xxx finally: xxx #抛出异常 raise Exception(xx)
#try是必须的,else可以没有,except和finally至少有一个。
31. Python中,可以用"pprint"函数类格式化要打印出来的信息,但是用"import pprint",且调用方式为"pprint.pprint()".
32. Python中,在字符串前加"r"修饰,表示不对字符串中的特殊符号作转义。
33. Open()函数打开文件时encoding参数默认是"None"。如果是打开文件时,该参数传"UTF-8";打开图片、MP3、ppt等多媒体文件时,该参数传"b",表示二进制。
34. Read()函数是用来读取文件到内存中的,可以传入数值参数,表示要读取多少字节的数据。如果数据足够大,每次传入参数的读取,都会从上次的末尾继续读。
35. Python中,操作文件时:
1)可以用seek()函数修改当前读取文件内容的字节位置。
2)可以用tell()函数查看当前读取的位置。
3)用rename()函数对文件重命名或者移动存储位置。
4)当然还有其他函数可用,可以查文档获取对应的函数。