摘要:不要疑惑,告诉你答案这个代表正负号的正。虽然一点技术含量没有,但是你要懂序列也许叫可迭代对象更为合适,但是我喜欢叫序列。
数据结构 可变类型与不可变类型(重头戏)
基操: 可变类型:[], {} # 可增删改 查 不可变类型: int float str () # 无法增删改, 只可查 升操: + 与 += 的区别: 也许很多人会说 + 和 += 是完全等价的,或者知道区别,但也说不出个所以然 看我操作:(忽略Python小整数池的内存固定分配问题) +: 无论是可变类型 还是 不可变类型, 都是新指向的空间 +=: 对于可变类型:原地操作,原指向,原空间 对于不可变类型:异地操作,新指向,新空间 我这里故意搞你一下思绪:见过 a=+1 么,可以运行试试。 不要疑惑,告诉你答案:这个+1 代表 正负号的 正1。 虽然一点技术含量没有,但是你要懂序列
也许叫可迭代对象更为合适,但是我喜欢叫序列。 我认知的序列包括 [], {}, () # 请记住这个序列,数据处理最为重要 此外说明一下: 1. 我的代码大多都是Ipython运行完贴上去的, 所以你看见的out格式就代表print了,要懂~ 2. 所写的大多都是实际经验中常用的 或者 冷门但是好用的 3. 列出的函数API有的嫌弃麻烦没有写参数,你要懂,(我这里没有顾及0入门的小白,谅解)元祖
基操: 元祖属于不可变类型,不能增删改,所以函数少的可怜 我用help查了一下,只有下面这2个函数。。。。。。 a = (1,2,3) count() # 统计元素个数 index() # 查找元素,并返回位置 升操: a = (1) # 哥们注意,这不是元祖,这是 整形1 ..... a = (1,) # 这才是元祖,单元素元祖需要加逗号,记住即可,不必纠结常用字符串操作:
基操: a = " 你2好 " a.find("你") # 搜索目标字符串,找到 则 返回索引,找不到 则 返回-1 (推荐使用) a.split(2) # 注意:不给参数,默认按所有 空白符 切割 a.strip() 升操: 1. string库的灵活使用 In [1]: import string In [2]: string.digits Out[2]: "0123456789" In [8]: string.ascii_letters Out[8]: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" In [9]: string.ascii_lowercase Out[9]: "abcdefghijklmnopqrstuvwxyz" In [10]: string.ascii_uppercase Out[10]: "ABCDEFGHIJKLMNOPQRSTUVWXYZ" In [12]: string.punctuation Out[12]: "!"#$%&"()*+,-./:;<=>?@[]^_`{|}~" 2. python3.6 - f模板字符串 新语法引出来,只为刷三观,具体自己去学 学过ES6可能会很熟悉 -> 其实就是模板字符串 (ES6和python语法真的很像) In [15]: name = "张三" In [16]: f"名字:{name}" Out[16]: "名字:张三" 如果你想学习更多f原语,请参考这位老哥-> https://blog.csdn.net/sunxb10/article/details/81036693常用列表操作:
a = [4,3,2,1] 基操: a.extend() # 参数如果是序列,则把这个序列解开,一个一个插入 a.append() # 参数写什么,插入的就是什么 升操: a[::] # 开辟空间 复制列表 a.sort(key=) # 记住这个key,可以写函数名 (后面也会写高阶函数的文章)常用字典操作:
基操: a = {1:2} a.update({key:value}) # 有则更新,无则添加(Key-Value算一个整体) a.setdefault(key, value) # 有此Key则不变 并返回value,无则插入key,value并返回None a.keys() # 返回所有 key (注意:返回值可以理解为 集合对象) a.values() # 返回所有 value (同上,返回值可理解为 集合对象) a.items() # 返回所有 键值对 (同上,返回值可理解为 集合对象) 升操: 1. Key是字典作为序列的默认首选项 解释对列表、元祖等序列等一系列操作如果应用在 字典上 就会只操作 Key 2. 双层序列 和 字典 转换: seq2dict: dict( ((1,2),(3,4)) ) dict2seq: tuple( {1:2,3:4}.items() )常用集合操作:
大前提: 集合=无序=去重 基操:add | pop | remove | update 和 & | - ^ 升操:(集合的初始化方式的差异) In [57]: s1 = set("abcd") # 理解方式: 此初始化方式 会先遍历 整个 字符串 In [58]: s1 Out[58]: {"a", "b", "c", "d"} In [59]: s2 = {"abcd"} # 理解方式: 此初始化方法把 整个 字符串当做集合的 一个 元素 In [60]: s2 Out[60]: {"abcd"}
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/43836.html
摘要:解释就相当于把每个序列元素的每一个单独用一个管道函数处理,再把他们按顺序组合成一个新可迭代对象注意这个管道函数只能是单参数函数,如果想传递多个参数怎么办使用偏函数怕有些人看不懂,这里就不用了,而是用普通函数定义方式固定值固定值固定值固定值固 map In [25]: list(map(lambda a:a**2, [1,2,3,4])) Out[25]: [1, 4, 9, 16] 解...
摘要:多线程对于爬虫方面也可以表现出较好的性能。计算密集型就别想多线程了,一律多进程。所以同一时刻最大的并行线程数进程数的核数这条我的个人理解很模糊,参考吧多线程多线程有种通过的那种方式,非常普遍,此处就不写了。 GIL的理解 GIL这个话题至今也是个争议较多的,对于不用应用场景对线程的需求也就不同,说下我听过的优点: 1. 我没有用过其他语言的多线程,所以无法比较什么,但是对于I/O而言,...
摘要:也就是给原函数加个外壳。类装饰填充了啊我是原函数类装饰填充了啊我是原函数说明后面关于类的装饰器如果理解困难当做了解即可,用的也少。 可迭代对象、生成器、迭代器三者的关系 1. 迭代器一定是可迭代对象 2. 生成器是迭代器的一种 3. 可迭代对象:必须实现 __iter__方法 4. 迭代器:必须实现 __iter__方法 和 __next__ 方法 5. 生成器:必须实现 __it...
摘要:类的继承类继承有三种调用方式,其实是有区别的,听我慢慢道来第一种父类方法参数直接调用第二种方法参数直接调用在谁的类下调用,就找此类对应的下一个就是要继承的第三种方法参数找类名对应的的下一个,就是继承的,一般写本身的类名上下文管理器上下文管理 类的继承 类继承有三种调用方式,其实是 有区别 的,听我慢慢道来 class A: def say(self, name): ...
阅读 2500·2023-04-26 02:57
阅读 1389·2023-04-25 21:40
阅读 2122·2021-11-24 09:39
阅读 3504·2021-08-30 09:49
阅读 714·2019-08-30 15:54
阅读 1147·2019-08-30 15:52
阅读 2030·2019-08-30 15:44
阅读 1258·2019-08-28 18:27