首页
关于
Search
1
python打包-Nuitka快速上手
107 阅读
2
python打包-pystand快速上手
23 阅读
3
python打包-pyinstaller快速上手
18 阅读
4
开始我的python学习之路
17 阅读
5
python学习记录第25天
10 阅读
默认分类
登录
Search
Typecho
累计撰写
29
篇文章
累计收到
32
条评论
首页
栏目
默认分类
页面
关于
搜索到
29
篇与
的结果
2023-04-26
python学习记录第13天
4.1 【基础】条件语句:if1. 简单小例子如果满足条件 A,则执行代码块 a,否则执行代码块 b。类似这样的控制流程语句,称之为条件语句。它的基本形式是if 判断条件: 执行语句…… else: 执行语句……最简单的例子>>> age = 20 >>> if age >=18: ... print("已经是成年人") ... else: ... print("还是未成年人") ... 已经是成年人2. 多条件语句如果需要多次判断可以利用 elif,它的基本形式是if 判断条件1: 执行语句…… elif 判断条件2: 执行语句…… elif 判断条件3: 执行语句…… else: 执行语句……最简单的例子>>> score = 75 >>> >>> if score >=90: ... print("优秀") ... elif score >= 80: ... print("良好") ... elif score >= 70: ... print("一般") ... elif score >= 60: ... print("合格") ... else: ... print("不合格") ... 一般3. 判断的条件在 Python 中,值可以分为假值 :None、空列表、空集合、空字典,空元组、空字符串、0、False 等真值 :非空列表、非空集合、非空字典,非空元组、非空字符串、非 0 数值、True 等if 和 elif 后面可以接一个表达式,也可以接一个对象。只要这个对象是真假,代码就会进入相应分支,如果为对象为假值,则继续下一判断。以 0 和 1 举例>>> aint = 1 >>> if aint: ... print("ok") ... ok4. 多个条件组合在讲多个条件组合时,先来了解一下 Python 中的逻辑运算符。以下假设变量 a 为 10, b为 20:运算符逻辑表达式描述实例andx and y布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。(a and b) 返回 20。orx or y布尔"或" - 如果 x 是非 0,它返回 x 的值,否则它返回 y 的计算值。(a or b) 返回 10。notnot x布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。not(a and b) 返回 False学习完逻辑运算符,就可以开始写多条件语句如果一个 if 条件需要同时满足多个条件,那么可以使用 and 或者 &如果一个 if 条件只需要满足多个条件的其中一个,那么可以使用 or 或者 |如果一个 if 要求不满足某个条件,那么可以使用 not 或者 !# 需要同时满足条件 A 和条件 B if 条件A and 条件B: ... # 只需要满足条件A或者条件B即可 if 条件A or 条件B: ... # 要求不满足条件A if not 条件A: ...
2023年04月26日
2 阅读
0 评论
1 点赞
2023-04-25
python学习记录第12天
3.5 【基础】迭代器1. 可迭代对象可以利用 for 循环的对象,都叫可迭代对象。譬如我们前面学过的 列表、元组、字典、字符串等都是可迭代对象。# 以列表为例 >>> alist = [0, 1, 2, 3, 4, 5] >>> for i in alist: ... print(i) ... 0 1 2 3 4 52. 是否可迭代?可能需要借助一些函数来判别,比如 Python 内置的 collections.abc 模块,这个模块只有在 Python 中才有噢,在这个模块中提供了一个 Iterable 类,可以用 isinstance 来判断。>>> from collections.abc import Iterable >>> >>> isinstance([0, 1, 2], Iterable) # 列表 True >>> isinstance({"name": "王炳明"}, Iterable) # 字典 True >>> isinstance((1,2,3), Iterable) # 元组 True >>> isinstance("hello", Iterable) # 字符串 True但是这种方法并不是百分百准确(具体下面会说到),最准确的方法,还是应该使用 for 循环。3. 可迭代协议可迭代对象内部是如何实现在你对其进行 for 循环时,可以一个一个元素的返回出来呢?这就要谈到迭代器协议。第一种场景:如果一个对象内部实现了 __iter__() 方法 ,并返回一个迭代器实例,那么该对象就是可迭代对象class Array: mylist = [0,1,2] # 返回迭代器类的实例 def __iter__(self): return iter(self.mylist) # 得到可迭代对象 my_list = Array() print(isinstance(my_list, Iterable)) # True for i in my_list: print(i)第二种场景:假设一个对象没有实现 __iter__() ,Python 解释器 __getitem__() 方法获取元素,如果可行,那么该对象也是一个可迭代对象。from collections.abc import Iterable class Array: mylist = [0,1,2] def __getitem__(self, item): return self.mylist[item] # 得到一个可迭代对象 my_list = Array() print(isinstance(my_list, Iterable)) # False for i in my_list: print(i)此时如果你使用 isinstance(my_list, Iterable) 去判断是否是可迭代,就会返回 False,因为 isinstance 这种方法就是检查对象是否有 __iter__ 方法。这也论证了使用 isinstance(my_list, Iterable) 去判断是否可迭代是不准确的。4. 什么是迭代器当你对一个可迭代对象使用 iter 函数后,它会返回一个迭代器对象,对于迭代器对象,我们可以使用 next 函数,去获取元素,每执行一次,获取一次,等到全部获取完毕,会抛出 StopIteration 提示无元素可取。>>> alist = [0, 1, 2, 3] >>> gen = iter(alist) >>> gen <list_iterator object at 0x100a94b20> >>> next(gen) 0 >>> next(gen) 1 >>> next(gen) 2 >>> next(gen) 3 >>> next(gen) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration5. 迭代器协议对比可迭代对象,迭代器的内部只是多了一个函数而已 -- __next__() 正因为有了它,我们才可以用 next 来获取元素。迭代器,是在可迭代的基础上实现的。要创建一个迭代器,我们首先,得有一个可迭代对象。现在就来看看,如何创建一个可迭代对象,并以可迭代对象为基础创建一个迭代器。from collections.abc import Iterator class Array: index = 0 mylist = [0,1,2] # 返回该对象的迭代器类的实例 # 因为自己就是迭代器,所以返回self def __iter__(self): return self # 当无元素时,必要抛出 StopIteration def __next__(self): if self.index <= len(self.mylist)-1: value = self.mylist[self.index] self.index += 1 return value raise StopIteration my_iterator = iter(Array()) print(isinstance(my_iterator, Iterator)) # output: True print(next(my_iterator)) # output: 0 print(next(my_iterator)) # output: 1 print(next(my_iterator)) # output: 2 print(next(my_iterator)) # StopIteration
2023年04月25日
2 阅读
0 评论
1 点赞
2023-04-24
python学习记录第11天
3.4 【基础】集合集合(英文名 set),它是一个无序的不重复元素序列。这里面有两个重点:无序,不重复1. 创建集合集合的创建有两种方法第一种方法:使用 花括号 {} 直接创建,创建的时候,{} 可以包含有重要的元素,但是创建完后,集合会去重,只留第一个。>>> aset = {"Apple", "Huawei", "Xiaomi"} >>> aset set(['Huawei', 'Xiaomi', 'Apple'])第二种方法:使用 set() 方法进行创建,当 set() 函数不接任何参数时,创建的是空集合,如果不创建空集合,可以传入一个列表。>>> bset = set() # 空集合 >>> bset set([]) >>> >>> cset = set(["Apple", "Huawei", "Xiaomi"]) >>> cset set(['Huawei', 'Apple', 'Xiaomi'])2. 增删改查增加元素使用 add 函数可以往集合中传入函数>>> aset = set() >>> >>> aset set([]) >>> aset.add("Apple") >>> aset.add("Huawei") >>> aset set(['Huawei', 'Apple'])另外,还可以使用 update 函数,来往集合中添加元素,update 函数后可接集合,列表,元组,字典等。这是接集合的例子>>> aset = set() >>> aset set([]) >>> >>> # 接集合 >>> aset.update({"Apple"}) >>> aset set(['Apple']) >>> >>> # 接列表 >>> aset.update(["Huawei"]) >>> aset set(['Huawei', 'Apple']) >>> >>> # 接元组 >>> aset.update(("Xiaomi",)) >>> aset set(['Huawei', 'Apple', 'Xiaomi']) >>> >>> # 接字典 >>> aset.update({"VIVO": "xxxx"}) >>> aset set(['Huawei', 'Apple', 'VIVO', 'Xiaomi'])删除元素使用 remove 函数可以删除集合中的元素>>> aset = {"Apple", "Huawei", "Xiaomi"} >>> aset.remove("Xiaomi") >>> aset set(['Huawei', 'Apple'])使用 remove 函数,如果对应的元素不存在,是会报错的。>>> aset = {"Apple", "Huawei", "Xiaomi"} >>> aset.remove("VIVO") Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'VIVO'对于这种情况,你可以使用 discard 函数,存在元素则移除,不存在也不会报错。>>> aset = {"Apple", "Huawei", "Xiaomi"} >>> aset.discard("VIVO") >>> aset set(['Huawei', 'Xiaomi', 'Apple'])此外,还有一个 pop 函数,用于从集合中随机删除元素,和列表、字典的 pop 不一样,这里的 pop 不能加任何的参数。>>> aset = {"Apple", "Huawei", "Xiaomi"} >>> aset.pop() 'Huawei' >>> aset.pop() 'Xiaomi' >>> aset.pop() 'Apple'最后,还要介绍一个 clear 函数,它用于清空集合的元素。>>> aset = {"Apple", "Huawei", "Xiaomi"} >>> aset set(['Huawei', 'Xiaomi', 'Apple']) >>> aset.clear() >>> aset set([])修改元素文章开头处,已经说明了集合是 无序 的,因此集合是没有索引的。既然没有索引,修改也无从谈起。记住:集合只有添加元素、删除元素。查询元素同上,没有顺序,也就没有索引,没有索引,查询也无从谈起。但是我们可以查看集合的其他内容比如,查看集合的长度>>> aset = {"Apple", "Huawei", "Xiaomi"} >>> len(aset) 33. 集合运算求合集将两个集合进行合并并去重,可以使用 union 函数,下面的示例中,由于 Huawei 是重复的元素,只会保留一个。>>> aset = {"Apple", "Huawei"} >>> bset = {"Xiaomi", "Huawei"} >>> aset.union(bset) set(['Huawei', 'Apple', 'Xiaomi'])另外还可以使用 | 的操作符>>> aset = {"Apple", "Huawei"} >>> bset = {"Xiaomi", "Huawei"} >>> aset | bset set(['Huawei', 'Apple', 'Xiaomi'])求差集要找出存在集合 A 但是不存在 集合 B 的元素,就是对两个集合求差集。可以使用 difference 函数,下面的示例中, Apple 在 aset 中存在,但在 bset 中不存在。>>> aset = {"Apple", "Huawei"} >>> bset = {"Xiaomi", "Huawei"} >>> aset.difference(bset) set(['Apple'])另外还可以使用 - 的操作符,更加直观>>> aset = {"Apple", "Huawei"} >>> bset = {"Xiaomi", "Huawei"} >>> aset - bset set(['Apple'])求交集要找出存在集合 A 并且存在集合 B 的元素,就是对两个集合求交集。可以使用 intersection 函数>>> aset = {"Apple", "Huawei"} >>> bset = {"Xiaomi", "Huawei"} >>> aset.intersection(bset) set(['Huawei']) >>>和 intersection 相似的还有一个 intersection_update 函数,它们的区别是,intersection_update 会原地更新在 aset 上,而不是会回交集。>>> aset = {"Apple", "Huawei"} >>> bset = {"Xiaomi", "Huawei"} >>> aset.intersection_update(bset) >>> aset set(['Huawei'])另外还可以使用 & 的操作符>>> aset = {"Apple", "Huawei"} >>> bset = {"Xiaomi", "Huawei"} >>> aset & bset set(['Huawei'])求不重合集如果计算两个集合中不重复的元素集合,可以使用 symmetric_difference 函数>>> aset = {"Apple", "Huawei"} >>> bset = {"Xiaomi", "Huawei"} >>> aset.symmetric_difference(bset) set(['Xiaomi', 'Apple'])和 symmetric_difference 相似的还有一个 symmetric_difference_update 函数,它们的区别是,symmetric_difference_update 会原地更新在 aset 上,而不是直接返回。>>> aset = {"Apple", "Huawei"} >>> bset = {"Xiaomi", "Huawei"} >>> aset.symmetric_difference_update(bset) >>> aset set(['Apple', 'Xiaomi'])4. 集合判断判断是否有某元素>>> aset = {"Apple", "Huawei"} >>> "Apple" in aset True判断两集合是否有相同元素如果两集合有相同元素,则返回 False,如果没有相同元素,则返回 True>>> aset = {"Apple", "Huawei"} >>> bset = {"Xiaomi", "Huawei"} >>> aset.isdisjoint(bset) False判断是否是子集aset = {"Apple", "Huawei"}bset = {"Huawei"}bset.issubset(aset)True
2023年04月24日
2 阅读
0 评论
1 点赞
2023-04-23
python学习记录第10天
3.3 【基础】字典字典(英文名 dict),它是由一系列的键值(key-value)对组合而成的数据结构。字典中的每个键都与一个值相关联,其中键,必须是可 hash 的值,如字符串,数值等值,则可以是任意对象1. 创建字典创建一个字典有三种方法第一种方法:先使用 dict() 创建空字典实例,再往实例中添加元素>>> profile = dict(name="王炳明", age=27, 众号="ython编程时光") >>> profile {'name': '王炳明', 'age': 27, '众号': 'ython编程时光'}第二种方法:直接使用 {} 定义字典,并填充元素。>>> profile = {"name": "王炳明", "age": 27, "公众号": "Python编程时光"} >>> profile {'name': '王炳明', 'age': 27, '公众号': 'Python编程时光'}第三种方法:使用 dict() 构造函数可以直接从键值对序列里创建字典。>>> info = [('name', '王炳明 '), ('age', 27), ('公众号', 'Python编程时光')] >>> dict(info) {'name': '王炳明 ', 'age': 27, '公众号': 'Python编程时光'}第四种方法:使用字典推导式,这一种对于新手来说可能会比较难以理解,这里先作了解,可直接跳过。>>> adict = {x: x**2 for x in (2, 4, 6)} >>> adict {2: 4, 4: 16, 6: 36}2. 增删改查增删改查:是 新增元素、删除元素、修改元素、查看元素的简写。由于,内容比较简单,让我们直接看演示查看元素查看或者访问元素,直接使用 dict[key] 的方式就可以>>> profile = {"name": "王炳明", "age": 27, "公众号": "Python编程时光"} >>> profile["公众号"] 'Python编程时光'但这种方法,在 key 不存在时会报 KeyValue 的异常>>> profile = {"name": "王炳明", "age": 27, "公众号": "Python编程时光"} >>> profile["gender"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'gender'所以更好的查看获取值的方法是使用 get() 函数,当不存在 gender 的key时,默认返回 male>>> profile = {"name": "王炳明", "age": 27, "公众号": "Python编程时光"} >>> profile.get("gender", "male") 'male'新增元素新增元素,直接使用 dict[key] = value 就可以>>> profile = dict() >>> profile {} >>> profile["name"] = "王炳明" >>> profile["age"] = 27 >>> profile["公众号"] = "Python编程时光" >>> profile {'name': '王炳明','age': 27,'公众号': 'Python编程时光'}修改元素修改元素,直接使用 dict[key] = new_value 就可以>>> profile = {"name": "王炳明", "age": 27, "公众号": "Python编程时光"} >>> >>> profile["age"] = 28 >>> profile {'name': '王炳明', 'age': 28, '公众号': 'Python编程时光'}删除元素删除元素,有三种方法第一种方法:使用 pop 函数>>> profile = {"name": "王炳明", "age": 27, "公众号": "Python编程时光"} >>> profile.pop("age") 27 >>> profile {'name': '王炳明', '公众号': 'Python编程时光'}第二种方法:使用 del 函数>>> profile = {"name": "王炳明", "age": 27, "公众号": "Python编程时光"} >>> del profile["age"] >>> profile {'name': '王炳明', '公众号': 'Python编程时光'}3. 重要方法判断key是否存在在 Python 2 中的字典对象有一个 has_key 函数,可以用来判断一个 key 是否在该字典中>>> profile = {"name": "王炳明", "age": 27, "公众号": "Python编程时光"} >>> profile.has_key("name") True >>> >>> profile.has_key("gender") True但是这个方法在 Python 3 中已经取消了,原因是有一种更简单直观的方法,那就是使用 in 和 not in 来判断。>>> profile = {"name": "王炳明", "age": 27, "公众号": "Python编程时光"} >>> "name" in profile True >>> >>> "gender" in profile False设置默认值要给某个 key 设置默认值,最简单的方法profile = {"name": "王炳明", "age": 27, "公众号": "Python编程时光"} if "gender" not in profile: profile["gender"] = "male"实际上有个更简单的方法profile = {"name": "王炳明", "age": 27, "公众号": "Python编程时光"} profile.setdefault("gender", "male")
2023年04月23日
2 阅读
0 评论
1 点赞
2023-04-22
python学习记录第9天
3.2 【基础】元组元组(英文名 tuple),和列表非常的相似,它也是由一系列元素按顺序进行排列而成的容器。不同的是,元组是不可变的,而列表是可变的。1. 创建元组创建元组有三种方法第一种方法:直接使用 圆括号 将所有的元素进行包围。这有别于创建列表时使用的是中括号:[]>>> atuple = (1,2,3,4) >>> atuple (1, 2, 3, 4) >>>第二种方法:有时候,创建元组时,圆括号可有可无的。>>> btuple = 1,2,3,4 >>> btuple (1, 2, 3, 4) >>>第三种方法:使用元组推导式,由于元组是不可变的,所以生成一个生成器对象。这一种对于新手来说可能会比较难以理解,这里先作了解,可直接跳过。>>> ctuple = (i for i in range(1,6)) >>> ctuple <generator object <genexpr> at 0x10a288f90>上面三种方法介绍完毕~当你在创建只有一个元素的元组时,你有可能会这样子创建>>> ctuple = (1) >>> type(ctuple) <class 'int'> >>> ctuple 1 >>>却发现,创建出来的并不是 tuple,而是一个 int 对象。此时千万要记住,当你创建只包含一个元素的元组时,要在第一个元素后面加一个逗号>>> ctuple = (1,) >>> type(ctuple) <class 'tuple'> >>> ctuple (1,) >>> >>> dtuple = 1, >>> type(dtuple) <class 'tuple'> >>> dtuple (1,)另外,创建空元组可以这样>>> a = tuple() # 第一种方法 >>> a () >>> type(a) <class 'tuple'> >>> b = () # 第二种方法 >>> b () >>> type(b) <class 'tuple'>2. 增删改查最前面我们说过,元组是不可变的。因此,你想对元组进行修改的行为都是不被允许的。呐,看一下示例,查看元素可以,但是修改元素和删除元素都报错了。>>> atuple = (1,2,3,4) >>> atuple[0] # 查看元素 1 >>> atuple[0] = 0 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment >>> >>> del atuple[0] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object doesn't support item deletion3. 元组与列表的转换虽然元组可能看起来与列表很像,但它们通常是在不同的场景被使用,并且有着不同的用途。元组是 immutable (不可变的),其序列通常包含不同种类的元素,并且通过解包或者索引来访问(如果是 namedtuples 的话甚至还可以通过属性访问)。列表是 mutable (可变的),并且列表中的元素一般是同种类型的,并且通过迭代访问。那有办法可以实现二者的转换吗?当然有,而且非常简单。将元组转成列表>>> atuple = (1,2,3,4) >>> type(atuple) <class 'tuple'> >>> >>> >>> list(atuple) [1, 2, 3, 4] >>> >>>将列表转成元组>>> alist = [1,2,3,4] >>> type(alist) <class 'list'> >>> >>> >>> tuple(alist) (1, 2, 3, 4)
2023年04月22日
5 阅读
0 评论
1 点赞
1
...
3
4
5
6