"""""""""str.strip([chars])chars:指定要移除的字符,如果没有指定,则默认移除空白符(空格符、换行符、制表符)删除字符串左右两边指定的字符str.isdigit()判定字符串中的每个字符是否都为数字型的字符str.join(iterable)iterable:包括 string、list、tuple、dict、set等等将可迭代对象中的元素(元素必须是字符串)以指定的字符串连接,返回新的字符串List修改列表列表是可变的,可以通过索引和切片的方式来对列表的元素重新赋值切片[x:x:x]list.extend(iterable)使用 iterable 中的所有元素来扩展列表,无返回值,相当于lst[len(lst):] = iterablesorted(iterable, [key], reverse=False)iterable:要排序的可迭代对象key:指定一个函数,在排序之前,每个元素都先应用这个函数之后再排序reverse:默认为 False,代表升序,指定为 True 则为降序对可迭代对象进行排序,以列表形式返回排序之后的结果元组(Tuple)特性:不可变,是序列元组用圆括号定义(圆括号可省略),元素没有类型限制# 元组是不可变的, 但其中的可变成员仍然可以被改变tup = (456, 'hello', ([789, 'world'],))tup[-1][0][0] = 987print(tup)字典(Dictionary)特性:可变,不是序列字典用花括号定义,每个元素都是键值对的形式 key: value字典的键不能存在可变的数据;值没有限制。字典的键如果重复,会自动去重,保留第一个重复键,并且其它重复的键对应的值还会对第一个重复键对应的值进行修改;值可以重复。当字典作为一个iterable对象参与操作时,只有键参与迭代。关键字dictdict(**kwargs) / dict(mapping) / dict(iterable)**kwargs 关键字参数mapping 映射iterable 可迭代对象可以通过zip来构建字典print(dict())print(dict(one=1, two=2, three=3))print(dict(zip(['one', 'two', 'three'], [1, 2,3])))print(dict([('one', 1), ('two', 2), ('three',3)]))zip(*iterables)返回一个迭代器,在迭代操作时,其中的第 i 个元组包含来自每个可迭代对象的第 i 个元素当所输入可迭代对象中最短的一个被耗尽时,迭代器将停止迭代不带参数时,它将返回一个空迭代器next(iterator) 内置函数,返回迭代器的下一个元素修改字典d['Name'] = 'Rill Liang'字典方法dict.keys()dict.values()dict.items() //都是返回视图对象dict.get(key, default=None)dict.update([other])dict.pop(key[, default])dict.popitem()dict.setdefault(key, default=None)dict.copy()dict.clear()集合(Set)定义sets = set()print(s)字典方法set.discard(elem)从集合中移除指定元素。 如果指定元素不存在,则不做任何操作序列的索引和切片六种标准数据类型中是序列的有:字符串、列表、元组所以它们都可以通过索引和切片的方式来访问其中的元素序列切片seq[start: end: step]start: 起始索引,闭区间步长为正数,start没有指定,默认为0步长为负数,start没有指定,默认为-1end: 结束索引,开区间步长为正数,end没有指定,默认为len(seq)步长为负数,end没有指定,默认为-len(seq)-1step: 步长,没有指定时,默认为1步长为正数,表示从左往右取数据步长为负数,表示从右往左取数据如果start到end的方向和step的正负性不一致,则得到空序列索引超出范围会报错,但切片不会特点:索引会降维,切片不会降维删除del 语句lst1=[1,2,3,4,5]del lst1 算数运算符+-*/除 会变成浮点数 5 / 2 = 2.5%取模(求余数) 5 % 2 = 1**幂运算//整除 相当于向下去整的结果 5 // 2 =2id(object)返回 object 的唯一标识符(内存地址)两个对象具有相同的id值,说明它们为同一对象基本序列赋值格式: a, b, c, ... = iterable将iterable的元素分别赋值给对应变量,元素和变量个数需要一致a, b, c = [3, 4, 5]print(a, b, c)a, b, c, d = '你好吗?'print(a, b, c, d)多目标赋值将一个对象同时赋值给多个变量。a = b = c = 999逻辑运算符and 布尔"与"(左边bool判定为False,返回左边;否则返回右边)or 布尔"或"(左边bool判定为True,返回左边;否则返回右边)not 布尔"非"(判定为False,返回 True;判定为True,返回False)all(iterable)如果 iterable 的所有元素 bool 判定都为 True,则返回 True如果 iterable 为空,也返回 Truetup = ('0', ' ', 'None', 'False', '[]')print(all(tup)) # Trueprint(all([])) # Trueany(iterable)如果 iterable 中存在至少一个元素 bool 判定为 True,则返回 True如果 iterable 为空,也返回 Falsetup = (0, '', None, False, [])print(any(tup)) # Falseprint(any([])) # False成员运算符判断某个对象是否为指定 iterable 的元素返回布尔值:True,Falsein 在其中not in 不在其中身份运算符判断两个标识符是不是引用自同一个对象返回布尔值:True,Falseis 类似于判断 id(a) == id(b)is not 类似于判断 id(a) != id(b)条件语句if if else if elif elif else三元表达式print(5 if 6 < 0 else 10)print(表达式 if 语句 else 表达式)循环while while 判断条件 循环体for for 变量 in 可迭代对象 循环体lst = ['d', 'c', 'k', 'a']# 获取元素for i in lst: print(i)# 获取索引for i in range(len(lst)): print(i)# 获取索引和元素for index, item in enumerate(lst): print(index, item) range([start], stop[, step])按照 step 生成从 start 到 stop 的整数序列(不可变)start:起始值,闭区间,默认为 0stop:结束值,开区间step:步长,默认为 1 enumerate(iterable, start=0)返回一个迭代器对象。迭代它会得到一个个的元组,每个元组是由索引和对应元素构成的。start决定索引的起始值。break 终止所在的循环continue 跳过当前这次循环,继续下一次循环推导式列表推导式格式:[exp for子句]格式:[exp for子句 更多的for子句或者if子句]字典推导式格式:{k: v for子句}格式:{k: v for子句 更多的for子句或者if子句} 集合推导式格式:{exp for子句}格式:{exp for子句 更多的for子句或者if子句}pass 语句pass 是一个关键字,表示一个空语句,当它被执行时,不做任何操作,通常用作占位语句,在语法上需要语句但实际上不需要执行任何操作的情况下使用。函数定义函数def func_name([arg1 [, arg2, ... argN]]): func_body形参: 函数定义时声明的参数。实参: 函数调用时传入的参数。函数只需要定义一次,就可以被多次使用。当函数被调用时,才执行函数体,定义时不执行。参数传递传不可变对象 & 传可变对象def func(a, b): print(a - b)func(3, 4)func(3, b=4)func(a=3, b=4)参数分类必需参数必须接收一个实参的形参,多了少了都不行位置参数按照从左往右的顺序将实参传递给对应的形参关键字参数按照指定的名称将实参传递给对应的形参,与位置顺序无关关键字参数必须放在位置参数的后面def func(a, b): print(a - b)func(a=3, b=4) # -1func(b=4, a=3) # -1func(3, b=4) # -1默认参数有接收到实参,使用实参,没有接收到实参时,才会使用默认值def func(a, b=4): print(a - b)func(3) # -1func(3, 5) # -2不定长参数*args:接收[0, +∞)个位置参数,贪婪的,将它们打包成一个元组,如果没有接收到实参,则为空元组。**kwargs:接收[0, +∞)个关键字参数,贪婪的,将它们打包成一个字典,如果没有接收到实参,则为空字典。必须放在所有形参的最后。def func(*args): print(args)func(3, 1, 4, 6)特殊参数默认情况下,实参的传递形式可以是位置参数或关键字参数可以用 / 和 * 来限制参数的传递形式其中 / 为仅限位置参数,限制在它之前的形参只能接收位置参数其中 * 为仅限关键字参数,限制在它之后的形参只能接收关键字参数这两个特殊参数只是为了限制参数的传递形式,不需要为它们传入实参匿名函数格式: lambda [arg1 [, arg2, ... argN]] : expression匿名函数的参数可以有多个,但是后面的 expression 只能有一个匿名函数返回值就是 expression 的结果,而不需要使用return匿名函数可以在需要函数对象的地方使用(如:赋值给变量、作为参数传入其他函数等),因为匿名函数可以作为一个表达式,而不是一个结构化的代码块封包封包将多个值同时赋值给一个变量时,会自动将这些值打包成一个元组tup = 345, 'hello', 789print(tup)解包解包是针对可迭代对象的操作1.赋值过程中的解包2.在可迭代对象前面加一个星号(*),在字典对象前面加双星(**),这种解包方式主要运用在函数传参的过程中命名空间与作用域(概念性较多)定义:命名空间(Namespace)是一个从名称到对象的映射实现:大部分命名空间当前由 Python 字典实现(内置命名空间由builtins 模块实现)作用:提供了在项目中避免名字冲突的一种方法(各个命名空间是独立的,在一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响的)内置命名空间包含了所有 Python 内置对象的名称在解释器启动时创建,持续到解释器终止全局命名空间包含了模块中定义的名称,如:变量名、函数名、类名、其它导入的名称在模块被读入时创建,持续到解释器终止局部命名空间包含了函数中定义的名称,如:函数中的变量名、参数名在函数被调用时创建,持续到该函数结束为止命名空间查找顺序局部命名空间 >> 全局命名空间 >> 内置命名空间作用域定义:Python 程序可以直接访问命名空间的正文区域作用:决定了哪一部分区域可以访问哪个特定的名称分类:(L - E - G - B 作用域依次增大)局部作用域(Local) - L闭包函数外的函数中(Enclosing) - E全局作用域(Global) - G内置作用域(Built-in) - B规则:在当前作用域如果找不到对应名称,则去更大一级作用域去找,直到最后找不到就会报错注意:模块、类以及函数会引入新的作用域,而条件语句,循环语句并不会局部作用域函数内部区域可以直接访问该函数所对应的局部命名空间,所以该区域为 局部作用域(Local)闭包函数外的函数中 闭包会应用到装饰器中def outer(a): #在inner函数的外部且在outer函数的内部区域,可以直接访问outer所对应的局部命名空间,所以该区域为 闭包函数外的函数中(Enclosing) b = 2 def inner(c): #局部作用域 return a + b + c return inner全局作用域函数外部区域可以直接访问该模块所对应的全局命名空间,所以该区域为 全局作用域(Global)内置作用域能够直接访问内置命名空间的正文区域为内置作用域builtins模块的全局作用域,相当于Python的内置作用域global 和 nonlocal当内部作用域想要给外部作用域的变量重新赋值时,可以用global 或 nonlocal 关键字"""# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]lst = [x ** 2for x in range(10)]print(lst)# [2, 3, 4, 4, 5, 6]lst = [x + y for x in range(5) if x % 2for y in (1, 2, 3)]print(lst)d = {i: i ** 2for i in range(5)}# {1: 7, 3: 7}d = {x: v for x in range(4) if x % 2for v in range(9) if v % 2}s = {x ** 2for x in range(4)}print(s)s = {x + y for x in range(5) if x % 2for y in (1, 2, 3)}print(s)deffunction(*args): print(args)function(3, 6, 7, 8)deffunc(**kwargs): print(kwargs)func(a=2, b=3, c=4)deffunc(*args, **kwargs): print(args) # (1, 2) print(kwargs) # {'a': 3, 'b': 4}func(1, 2, a=3, b=4)lst = [4, 5, 1, 3, 8, 9]print(list(map(lambda x: x if x % 2else x ** 2, lst)))a, b, c = [4, 3, 'a']print(a) # 4print(b) # 3print(c) # 'a'a, *b, c = 'hello'print(a) # 'h'print(b) # ['e', 'l', 'l']print(c) # 'o'a, *b, c = 'he'print(a) # 'h'print(b) # []print(c) # 'e'*a, = 'hel'print(a) # ['h', 'e', 'l']_, *b, _ = [4, 3, 5, 7]print(b) # [3, 5]deffunc(a, b, c): print(a, b, c)tup = (1, 2, 3)func(*tup)d = {'a': 1, 'b': 2, 'c': 3}func(*d) # 等价于func('a', 'b', 'c')# 在函数传参时, **dict可以将该dict解包成关键字参数func(**d) # 等价于func(a=1, b=2, c=3)defouter(a):#在inner函数的外部且在outer函数的内部区域,可以直接访问outer所对应的局部命名空间,所以该区域为 闭包函数外的函数中(Enclosing) b = 2definner(c):#局部作用域return a + b + creturn innerouter(3)(3)defouter():global a, b a, b, c, d = 3, 4, 5, 6 print(a, b)definner():global a, bnonlocal c, d a, b, c, d = 7, 8, 9, 0 inner() print(c, d)a, b = 1, 2outer()print(a, b)