Loading

Python 学习笔记

 

面向过程:

以指令为中心,由指令处理数据

如何组织代码解决问题

面向对象:

以数据为中心,所有的处理代码都围绕数据展开I 如何设计数据结构组织数摇,并提供对此类数据所允许处理操作

 

Python的关键要素

基本数据类型

对象饮用

组合数据类型

逻辑操作符

控制流语句

算术操作符

输入/输出

函数的创建与调用

 

 

数据类型:转化

隐式

显示

 

 

字典:kv集合

{‘a’:31, ‘b’:78}

 

dir(), id(), type(), str(), help(), len(), callable()

 

Python过程式编程:

 

 

if __name__ = __main__:
pass

 

每个模块都有一个名为__name__的内建变量,此变量值会根搭调用此模块的方式发生变化:

如果此文件被作为模块导入,则__name__的值为模块名称

如果此文件被直接执行,则__name__的值为“__main__ ”:

 

 

class:自定义类型

type()类型

instance:实例化

 

类:数据和方法

数据:变量

方法:函数

 

类:实例化成对象

 

CA:

IA:

IB:

 

 

两个对象比较:

1、值比较:对象中的数据是否相同:

2、身份比较:两个变量名引用的是否为同一对象:

3、类型比较:两个对象的类型是否相同:

 

 

核心数据类型:

数字:int, long, float, complex, bool 字符:str, unicode

列表:list

字典:dict

元组:tuple

文件:file

其它类型:集合(set), frozenset,类类型,None 

 

 

其它文件类工具:pipes, fifos, sockets 

 

 

类型转换:

str(), repr()或format():将非字符型数据转换为字符:

int():转为整数 

float():转为浮点数

list(s):将字串s转为列表;

tuple(s):将字串s转为元组 

set(s):将字串s转为集合;

frozenset(s):将字串s转换为不可变集合;

dict(d):创建字典:其d必须是(key, value)的元祖序列;

 

chr(x):将整数转换为ASCII 字符

ord(x):将字符转换为整数值

hex(x):将整数转换为十六进制字符

bin(x):二进制

oct(x):八进制

 

 

数字类型:(不可变类型)

Python的数字字面量:布尔型, 整数, 浮点数, 复数

True:1

False:0

 

 

序列类型:

字符类型:

字符串字面量:把文本放入单、双、三引号中:

如果要使用Unicode编码,则在字串之前使用字符‘u’进行标识,如u‘hello,word’

文档字串:模块、类或函数的第一条语句是一个字符的话,该字符串就成为文档字符串,可以使用__doc__属性引用。如printName.__doc__

 

运算符:

索引运算:[i]

切片运算:[i:j]切片后的结果会生成新的内存对象

扩展切片:[i:j:stride] 步长

 

 

支持运算:

索引、切片、min()、max() 、len()等

支持操作:

对象自有的内置方法 

 

 

列表:

容器类型

可以包含任意对象的有序集合,通过索引(偏移)访问其中的元素。可变对象

支持在原处修改:修改引用,而不是本身对象。

修改指定的索引,修改指定的分片,删除语句,内置方法

l1 + l2:合并两个列表,返回一个新的列表:不会修改原列表

l1 * N: 把l1重复N次,返回一个新列表

 

in : 成语关系判断字符 用法 obj in container

not in : 成语关系判断字符 用法 obj not in container

 

列表解析:[ ]

列表复制方式:

l1 =  [1,2,3,4]

 

l2 = l1 

 

import copy

 

l2 = copy.deepcopy(l1)

 

l2 = l1[:]

 

元祖:

表达式符号:()

 

容器类型

任意对象的有序集合,通过索引访问其中的元素,不可变对象,固定长度

异构,嵌套

常见操作:

()定义空元组

(1,)

(1,2)

 

t1 + t2 

t1 * N

in , not in   

虽然元组本身不可变,但是如果元组内嵌套了可变类型的元素,那么此类元素的修改不会返回新元组:

 

 

字典:dict

 

字典在其他编程语言中又称作关联数组或散列表:

 

通过键实现元素存取,无序结合,可变类型容器,长度可变,异构,嵌套

 

{key1 : value1, key2 : value2}

{} 空字典

{‘x’ : 32, ‘y’ : [1,2,3]}

 

字典复制:d2 = d1.copy()

d1.iteritems: 返回一个迭代器对象

 

如何获取使用帮助:

获取对象支持使用的属性和方法:dir()

获取某方法的具体使用帮助:help(list.pop)

获取可调用对象的文档字串:print obj.__doc__

 

集合:无序排列可哈希的值:

支持集合关系测试

成员关系测试:
in

not in

迭代

不支持:索引,元素获取,切片

 

 

集合的类型:set()可变,frozenset()不可变

没有特定语法格式,只能通过工厂函数创建

 

 

容器、类型、对象

1、容器可以不用使用换行符就可以跨行的,允许最后一个字符使用‘’,‘’

2、所有对象都有引用计数, 更换新变量名称或放入容器中,都会导致引用计数增加。import sys   sys.getfcount(obj)

3、列表和字典都支持两种类型的肤质操作:浅复制、深复制。深复制可使用copy模块中的deepcopy()实现。

4、python中的所有对象都是‘第一类’,这意味着使用标识符命名的所有对象都具有相同状态,于是,能够命名所有对象都可以直接当数据进行处理

5、所有序列都支持迭代

6、所有序列都支持的操作和方法:

s[i]

s[i:j]

s[i:j:stride]

len(s)

min(s)

max(s)

sum(s)

all(s) 所有都为Trues

any(s) 任意为Trues

s1 + s2 链接

s1 * N 重复N次

obj in s1: 成员关系判断

obj not in si:

7、可变序列的操作:

s1[index] = value : 元素赋值

s1[i:j] = t :切片赋值

del s1[index] 

del s1[i:j]

del s1[I:j:strde]

 

 

Python表达式和语句

表达式: 1+2

语句: 

Python中常用的表达式操作符:

x + y , x - y , 

x * y ,x / y , x // y, x % y

 

逻辑运算:

x or y , x and y , not x

 

成员关系运算:

x in y , x not in y

 

对象实例测试:

x is y , x not is y

 

比较运算:
x < y , x > y , x <= y , x >= y, x == y, x != y 

 

位运算:

x | y , x & y , x ^ y , x << y , x >> y

 

一元运算:

-x , +x , ~x

幂运算:

x ** y

索引和分片:

x[I] , x[i:j] , x[I:j:strde]

 

调用:

x(…)

取属性:

x.attribute

元组(…)

序列[…]

字典{...}

 

三元选择表达式: x if y else z

匿名函数:lambda args : expression

生成器函数发送协议: yield x

 

 

元算优先级:

(…) , […] , {…}

s[i] , s[I:j]

s.attribute

s(…)

+x

x ** y

* , / , // , %

+ , -

<< , >>

&

^

|

< , <= , > , >= , == , !=

is , not is 

in , not in 

not 

and

or

lambda

语句:

赋值语句

调用语句

if/elif/else: 条件判断

for/ else: 序列迭代

while/else :普通循环

pass:占位符

break

continue

def

return

yield

global:命名空间

raise:手动出发异常

import

from:模块属性访问

class:类

try/except/finally:捕捉异常

del:删除饮用

assert:调试检查

with/as :环境管理器

 

赋值语句:

隐形赋值: import , from , def, class , for ,函数参数

元组和列表分解赋值:当赋值符号(=)的左侧为元组或列表时,Python会按照位置把右边的对象和左边的目标自左而右逐一进行配对:个数不同时会出发异常,此时可以切片的方式进行 

例:

l1 = (‘a’ , ‘b’ , ‘c’ )     

x,y,z = l1

print(x)

‘a’

多重目标赋值:

num1 = num2 = num3 = 44

增强赋值: += , -= , *= ,/= , //= ,&=,

 

 

 

 

Python中的真假:

1、任何非0数字和非空对象都为真:

2、数字0、空对象和特殊对象None均为假:

3、比较和相等测试会递归地应用于数据结构中:

4、返回值为True或False;

 

组合条件测试:

X and Y:与运算

X or Y:或运算

not X:非运算

 

A = X if Y else Z

 

if Y:

A = X

else:

A = Z

 

expression1 if boolean_expression else expression2

(三元表达式)

 

 

while:

while bool_expression:

while_suite

else:

else_suite 

break:跳出最内层循环

continue:跳到所处的最近层循环的开始处

pass:占位语句

else:代码块:循环正常终止才会执行:如果循环终止是由break跳出导致的,则else不会执行

 

 

 

列表解析:根据已有列表,高效生成新列表的方式

Var = [expression for iter_var in iterable]

l2 = [I ** 2 for I in l1]

Var = [expression for iter_var in iterable if cond_expr]

l3 =  [I ** 2 for in l1 if i >= 3]

矩阵生成:

l1 = ['x','y','z']

l2 = [1,2,3]

l3 = [(i,j)for i in l1 for j in l2]

l3

[('x', 1), ('x', 2), ('x', 3), ('y', 1), ('y', 2), ('y', 3), ('z', 1), ('z', 2), ('z', 3)]

 

 

 

 
posted @ 2022-07-07 13:41  ThankCAT  阅读(42)  评论(0编辑  收藏  举报