Python3 学习笔记

106 阅读10分钟

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')

==============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================