1. 标准数据类型
=============
Python 中有六个标准的数据类型:
● Number(数字)
● String(字符串)
● List(列表)
● Tuple(元组)
● Set(集合)
● Dictionary(字典)
Python3 的六个标准数据类型中:
● 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
● 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
=================================================================================================================================================================================================================================
2. 字符串
1. Python 中单引号和双引号使用完全相同,但单引号和双引号不能匹配。
2. 使用三对引号('''或""")可以囊括一个多行字符串。
>>> """this is mutible lines ... print it... hello world"""'this is mutible lines \nprint it\nhello world'>>>
3. 字符串的截取的语法格式如下:变量 [头下标: 尾下标: 步长]
>>> long_words = "abcdefgh">>> long_words[0:5:2]'ace'>>>
4. Python 字符串格式化
name = "小明"age = 10print ("我叫 %s 今年 %d 岁!" % (name, age))
f-string 是 python3.6 之后版本添加的,称之为字面量格式化字符串,是新的格式化字符串的语法。
name = 'lebron'print(f'Hello {name}') # 替换变量print(f'{1+2}') # 使用表达式w = {'name': 'lebron', 'url': 'www.hiintern.com'}print(f'{w["name"]}: {w["url"]}')
=======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
3. 条件控制
像 if、while、def 和 class 这样的复合语句,首行以关键字开始,以冒号 ( : ) 结束,该行之后的一行或多行代码构成代码组。
if expression : suiteelif expression : suite else : suite
● 1、每个条件后面要使用冒号(:),表示接下来是满足条件后要执行的语句块。
● 2、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
● 3、在 Python 中没有 switch – case 语句,但在python3.10中添加了用法类似的match-case语句。
match variable: #这里的variable是需要判断的内容 case ["quit"]: statement_block_1 # 对应案例的执行代码,当variable="quit"时执行statement_block_1 case ["go", direction]: statement_block_2 case ["drop", *objects]: statement_block_3 ... # 其他的case语句 case _: #如果上面的case语句没有命中,则执行这个代码块,类似于Switch的default statement_block_default
=======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
4. import 与 from...import
在 Python 用 import 或者 from...import 来导入相应的模块。
将整个模块 (somemodule) 导入,格式为: import somemodule
从某个模块中导入某个函数,格式为: from somemodule import somefunction
从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc
将某个模块中的全部函数导入,格式为: from somemodule import *
==================================================================================================================================================================================================================================================================================
5. 删除一些对象
1. 可以使用 del 语句删除一些对象引用
del var1[,var2[,var3[....,varN]]]>>> tel = {'Jack':1557, 'Tom':1320, 'Rose':1886}>>> del tel['Rose'] # 删除一个键值对
2. 以通过使用 del 语句删除单个或多个对象
del vardel var_a, var_b
其他语言一般都是复制为null,在python中可以使用del进行删除。
==================================================================================================================================================================================================================================================
6. List(列表)
List(列表) 是 Python 中使用最频繁的数据类型。
列表是写在方括号之间、用逗号分隔开的元素列表。列表中元素的类型可以不相同,看着像数组但不是数组:
>>> a = ['him', 25, 100, 'her']>>> print(a)['him', 25, 100, 'her']
List 内置了有很多方法,例如 append()、pop() 等等。
注意:
● 1、List 写在方括号之间,元素用逗号隔开。
● 2、和字符串一样,List 可以被索引和切片。
● 3、List 可以使用 + 操作符进行拼接。
● 4、List 中的元素是可以改变的。
================================================================================================================================================================================================================================================================================================================
7. Sets(集合)
集合(set)是一个无序不重复元素的集。
基本功能是进行成员关系测试和消除重复元素。
可以使用大括号 或者 set() 函数创建 set 集合,注意:创建一个空集合必须用 set() 而不是 { },因为{ }是用来创建一个空字典。
>>> student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}>>> print(student) # 重复的元素被自动去掉{'Jim', 'Jack', 'Mary', 'Tom', 'Rose'}>>> 'Rose' in student # membership testing(成员测试)True>>> # set可以进行集合运算... >>> a = set('abracadabra')>>> b = set('alacazam')>>> a{'a', 'b', 'c', 'd', 'r'}>>> a - b # a和b的差集{'b', 'd', 'r'}>>> a | b # a和b的并集{'l', 'm', 'a', 'b', 'c', 'd', 'z', 'r'}>>> a & b # a和b的交集{'a', 'c'}>>> a ^ b # a和b中不同时存在的元素{'l', 'm', 'b', 'd', 'z', 'r'}
============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
8. 循环
可以使用 range 指定区间的值:
>>> for i in range(5,9) : print(i) 5678>>>
也可以使 range 以指定数字开始并指定不同的增量(甚至可以是负数;有时这也叫做'步长'):
>>> for i in range(0, 10, 3) : print(i) 0369>>>
可以结合 range() 和 len() 函数以遍历一个序列的索引:
>>> a = ['Mary', 'had', 'a', 'little', 'lamb']>>> for i in range(len(a)):... print(i, a[i])...0 Mary1 had2 a3 little4 lamb
pass 语句
在Python中,pass语句是一个空语句,用于语法上需要语句但逻辑上不需要执行任何操作的场景。
pass语句主要有以下几种使用场景:
1. 占位符
在代码构建的早期阶段,可以用pass语句占据一个函数或条件分支的位置,意在以后填充代码
def func(): passif some_condition: pass
2. 作为while/if条件语句的内容
当while/if语句中暂时不需要任何动作时,可以使用pas语句代替,避免语法错误
while True: pass if x > 0: pass
3. 保持程序结构完整性
为了保持程序结构完整性,即使逻辑上不需要,我们也需要使用pass语句作为占位符
for i in range(x): if i % 2 == 0: print(i) else: pass
4. 作为类的最小定义
在定义一个计划用于继承但目前没有任何动作的类是,pass语句可以用于声明最小的类的定义。
class MyEmptyClass: pass
=====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
9. 迭代器与生成器
迭代器
迭代是 Python 最强大的功能之一,是访问集合元素的一种方式。。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,它可以被next()函数调用并逐一返回数据,直到抛出StopIteration错误表示遍历结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()。
字符串,列表或元组对象都可用于创建迭代器:
>>> list=[1,2,3,4]>>> it = iter(list) # 创建迭代器对象>>> print (next(it)) # 输出迭代器的下一个元素1>>> print (next(it))2>>>
生成器
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值。并在下一次执行 next() 方法时从当前位置继续运行。
def fibonacci(n): # 生成器函数 - 斐波那契 a, b, counter = 0, 1, 0 while True: if (counter > n): return yield a a, b = b, a + b counter += 1f = fibonacci(10) # f 是一个迭代器,由生成器返回生成while True: try: print (next(f), end=" ") except StopIteration: sys.exit()
====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
10. 函数
Python 定义函数使用 def 关键字,一般格式如下:
def 函数名(参数列表): 函数体
python不需要定义返回值,直接用变量接受函数中的返回值。
=================================================================================================
11. 数据结构
列表推导式
列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。
>>> vec = [2, 4, 6]>>> [3*x for x in vec][6, 12, 18]>>> [[x, x**2] for x in vec][[2, 4], [4, 16], [6, 36]]
我们可以用 if 子句作为过滤器:
>>> [3*x for x in vec if x > 3][12, 18]>>> [3*x for x in vec if x < 2] []
列表推导式可以使用复杂表达式或嵌套函数:
>>> [str(round(355/113, i)) for i in range(1, 6)]['3.1', '3.14', '3.142', '3.1416', '3.14159']
============================================================================================================================================================================================================================================================================================================================================================================================================================================
12. 模块
模块是一个包含所有你定义的函数和变量的文件,其后缀名是 .py。模块可以被别的程序引入,以使用该模块中的函数等功能。下面是一个使用 Python 标准库中模块的例子。
import sysprint('命令行参数如下:')for i in sys.argv: print(i)print('\n\nPython 路径为:', sys.path, '\n')
一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用 __name__ 属性来使该程序块仅在该模块自身运行时执行。
if __name__ == '__main__': print('程序自身在运行')else: print('我来自另一模块')
包:
包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。比如一个模块的名称是 A.B, 那么他表示一个包 A 中的子模块 B 。
sound/ 顶层包 __init__.py 初始化 sound 包 formats/ 文件格式转换子包 __init__.py wavread.py wavwrite.py ... effects/ 声音效果子包 __init__.py echo.py surround.py reverse.py ... filters/ filters 子包 __init__.py equalizer.py vocoder.py karaoke.py ...
用户可以每次只导入一个包里面的特定模块,比如:
# 第一种导入方式import sound.effects.echo# 第二种导入方式from sound.effects import echo
直接导入一个函数或者变量
from sound.effects.echo import echofilter
如果在结构中包是一个子包(比如这个例子中对于包 sound 来说),而你又想导入兄弟包(同级别的包)你就得使用导入绝对的路径来导入。比如,如果模块 sound.filters.vocoder 要使用包 sound.effects 中的模块 echo ,你就要写成 from sound.effects import echo。
=============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
13. 错误和异常
try except 语句还有一个可选的 else 子句,如果使用这个子句,那么必须放在所有的 except 子句之后。这个子句将在 try 子句没有发生任何异常的时候执行:
try: f = open('myfile.txt') except IOError: print('cannot open', arg) else: print(arg, 'has', len(f.readlines()), 'lines') f.close()
抛出异常
Python 使用 raise 语句抛出一个指定的异常。例如:
raise 唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。
>>> raise NameError('HiThere')Traceback (most recent call last): File "<stdin>", line 1, in ?NameError: HiThere
定义清理行为
>>> try: raise KeyboardInterrupt finally: print('Goodbye, world!')
=========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
14. 类
类定义
class ClassName: <statement-1> . . . <statement-N>
类的方法
在类的内部,使用 def 关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数:
#类定义class people: #定义基本属性 name = '' age = 0 #定义私有属性,私有属性在类外部无法直接进行访问 __weight = 0 #定义构造方法 def __init__(self,n,a,w): self.name = n self.age = a self.__weight = w def speak(self): print("%s 说: 我 %d 岁。" %(self.name,self.age))# 实例化类p = people('W3Cschool',10,30)p.speak()
继承(python支持多继承)
需要注意圆括号中基类的顺序,若是基类中有相同的方法名,而在子类使用时未指定,Python 从左至右搜索 即方法在子类中未找到时,从左到右查找基类中是否包含方法。需要注意圆括号中基类的顺序,若是基类中有相同的方法名,而在子类使用时未指定,Python 从左至右搜索 即方法在子类中未找到时,从左到右查找基类中是否包含方法。
class DerivedClassName(BaseClassName1): <statement-1> . . . <statement-N>
类的专有方法:
__init__ : 构造函数,在生成对象时调用__del__ : 析构函数,释放对象时使用__repr__ : 打印,转换__setitem__ : 按照索引赋值__getitem__: 按照索引获取值__len__: 获得长度__cmp__: 比较运算__call__: 函数调用__add__: 加运算__sub__: 减运算__mul__: 乘运算__div__: 除运算__mod__: 求余运算__pow__: 乘方
类的私有属性:
__private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。class JustCounter: __secretCount = 0 # 私有变量 publicCount = 0 # 公开变量
类的私有方法
__private_method:两个下划线开头,声明该方法为私有方法,不能在类地外部调用。在类的内部调用 slef.__private_methods。
class JustCounter: def __secretCount(): # 私有方法 print('private method')
==============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================