Python学习笔记

xiaoxiao2021-02-28  52

Python3和Java的区别

注释              多行注释可以用多个 # 号,还有 ''' 和 """。代码块表示    使用缩进来表示代码块,不需要使用大括号 {} 。多行语句        如果语句很长,我们可以使用反斜杠(\)来实现多行语句。数字类型        有四种类型:整数、布尔型、浮点数和复数。字符串引号     单引号和双引号使用意义完全相同。使用三引号('''或""")可以指定一个多行字符串。字符串相关     允许r''表示内部字符不转义。允许用'''...'''表示多行内容。字符串索引     有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。截取的语法格式如下:变量[头下标:尾下标]。同一行显示多条语句    可以在同一行中使用多条语句,语句之间使用分号(;)分割Print 输出        默认输出是换行的,如果要实现不换行需要在变量末尾加上 ,end=""变量不需要声明  Python是动态语言。除法                除法/  。只取结果的整数部分的除法//。只取结果的余数%。可变与不可变    不可变数据(四个):Number(数字)、String(字符串)、Tuple(元组)、Sets(集合);可变数据(两个):List(列表)、Dict(字典,相当于其他语言的map)。数字                支持 int、float、bool、complex(复数)。对整数、浮点数大小没有限制。列表                列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。条件判断        Python用elif 代替else if。迭代              Python用for x in List 。 Java则通过下标 for (int i : List)。数据类型转换   Python比如   int(12.34)、 float('12.34')、 str(1.23)、 bool(1)、 bool('') 。函数参数        Python支持默认参数(=)、可变参数(*)、关键字参数(**)、命名关键字参数(*,)。Java只支持方法重载。切片                Python的list, tuple, str支持切片,从索引1开始,取出2个元素 L[1:3]。前10个数,每两个取一个 L[:10:2]。同样是截取,Jave则使用字符串方法substring。列表生成            Python支持列表生成式、生成器。

其他

IO    

字符串在内存以Unicode表示。如果要在网络传输或保存在磁盘,str要变为字节为单位的bytes。英文字符可以用b'前缀转成bytes。中文字符串要用UTF-8将其编码成bytes,比如'中文'.encode('utf-8')。

反过来,如果从网络或磁盘上读取了字节流,该数据就是bytes。要将bytes变为str,比如b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')

格式化

用%实现格式化,比如 'growth rate: %d %%' % 7  ; 'Hi, %s, you have $%d.' % ('Michael', 1000000)。

常用占位符有 %d 整数; %f 浮点数; %s 字符串。%% 表示一个%。

列表操作 -- help('list')

list,可变的有序列表,比如 classmates = ['Michael', 'Bob', 'Tracy']。list常用方法,比如len, append, insert, pop

tuple,不可变的有序列表,比如 t = (1, 2)。只有1个元素的tuple定义时必须加一个逗号,,来消除歧义。

dict,使用键-值(key-value)存储,比如d = {'Michael': 95, 'Bob': 75, 'Tracy': 85},key必须是不可变对象。dict常用方法,比如get,pop。这样赋值 d['Michael'] = 27。

set,一组无序和无重复元素的集合。和dict的唯一区别就是没有value。要提供list来创建 s = set([1, 2, 3])。常用方法,比如add, remove。还可以做数学意义上的集合操作,比如&(交集), |(并集)。

不可变对象

对于可变对象,比如list,对list进行操作,list内部的内容是会变化的。比如:>>> a = ['c', 'b', 'a']    >>> a.sort()

对于不可变对象,比如str,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回。

>>> a = 'abc'       >>> a.replace('a', 'A')

函数内置函数  Built-in Functions — Python 3.6.5 documentation

定义函数要使用def语句。用from abstest import my_abs来导入my_abs()函数。参数定义的顺序必须是:必选参数、默认参数、可变参数/命名关键字参数和关键字参数。默认参数一定要用不可变对象,如果是可变对象,如果是可变对象,程序运行时会有逻辑错误。*args是可变参数,args接收的是一个tuple;**kw是关键字参数,kw接收的是一个dict。**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict。对于任意函数,都可以通过类似func(*args, **kw)的形式调用它。

迭代

Python的for循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上。默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。由于字符串也是可迭代对象,因此,也可以作用于for循环  for ch in 'ABC':

如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断

>>> isinstance(123, Iterable) # 整数是否可迭代 False

列表生成式

范围 [x * x for x in range(1, 11)]   [x * x for x in range(1, 11) if x % 2 == 0]

字符 [m + n for m in 'ABC' for n in 'XYZ']             [s.lower() for s in L]

字典 [k + '=' + v for k, v in d.items()]

生成器

创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。 g = (x * x for x in range(10))

如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator。

迭代器

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。把list、dict、str等Iterable变成Iterator可以使用iter()函数。Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。

高阶函数

变量可以指向函数 f = abs   函数名也是变量 abs = 10

传入函数          def add(x, y, f):  return f(x) + f(y)    调用 add(-5, 6, abs),结果会是11

list(map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9]))  将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])) 关键在于正确实现一个“筛选”函数。

sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)

返回函数、匿名函数、装饰器、偏函数

Public 和Private 函数

外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义为public。

正常的函数和变量名是公开的(public),可以被直接引用。

类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用。

如果以__开头,变成了一个私有变量(private),只有内部可以访问,外部不能访问。

数据封装、继承、多态class Dog(Animal):......

动态语言的鸭子类型特点决定了继承不像静态语言那样是必须的。

获取对象信息

type()判断基本类型、一个指向函数或者类的变量。

isinstance()判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上。

dir()获得一个对象的所有属性和方法,它返回一个包含所有属性和方法的list

配合getattr()、setattr()以及hasattr(),我们可以直接操作一个对象的状态。

类属性

动态绑定:s.name = 'Michael'        s.set_age = MethodType(set_age, s)

允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性。(但对子类无效)

如果子类中也定义__slots__,这样,子类实例允许定义的属性就是自身的__slots__加上父类的__slots__。

@property的使用。能取代getter、setter,实现查询、赋值功能,并让外部友好地访问。

多重继承

通过多重继承,一个子类就可以同时获得多个父类的所有功能。MixIn

定制类__str__     __iter__   __getitem__    __getattr__    __call__

枚举

Enum可以把一组相关常量定义在一个class中,且class不可变,而且成员可以直接比较。

创建类:type()函数、metaclass

Hello = type('Hello', (object,), dict(hello=fn)) # 创建Hello class

转载请注明原文地址: https://www.6miu.com/read-1700101.html

最新回复(0)