21.float()函数
''' 描述 float() 函数用于将整数和字符串转换成浮点数。 语法 float()方法语法: class float([x]) 参数 x -- 整数或字符串 返回值 返回浮点数。 ''' print(float(1)) #输出 1.0 print(float(112.0)) #输出 112.0 print(float('123')) #输出 123.0 print(float(True)) #输出 1.0 print(float(False)) #输出 0.0 #print(float('a')) #报错 ValueError: could not convert string to float: 'a'
22.format()函数
''' 自python2.6开始,新增了一种格式化字符串的函数str.format(),此函数可以快速处理各种字符串。 语法 它通过{}和:来代替%。 请看下面的示例,基本上总结了format函数在python的中所有用法 ''' #通过位置 print ('{0},{1}'.format('chuhao',20)) #chuhao,20 print ('{},{}'.format('chuhao',20)) #chuhao,20 print ('{1},{0},{1}'.format('chuhao',20)) #20,chuhao,20 #通过关键字参数 print ('{name},{age}'.format(age=18,name='chuhao')) #chuhao,18 class Person: def __init__(self,name,age): self.name = name self.age = age def __str__(self): return 'This guy is {self.name},is {self.age} old'.format(self=self) print (str(Person('chuhao',18))) #This guy is chuhao,is 18 old #通过映射 list a_list = ['chuhao',20,'china'] print ('my name is {0[0]},from {0[2]},age is {0[1]}'.format(a_list)) #my name is chuhao,from china,age is 20 #通过映射 dict b_dict = {'name':'chuhao','age':20,'province':'shanxi'} print ('my name is {name}, age is {age},from {province}'.format(**b_dict)) #my name is chuhao, age is 20,from shanxi #填充与对齐 print ('{:>8}'.format('189')) # 189 print ('{:0>8}'.format('189')) #00000189 print ('{:a>8}'.format('189')) #aaaaa189 #精度与类型f #保留两位小数 print ('{:.2f}'.format(321.33345)) #321.33 #用来做金额的千位分隔符 print ('{:,}'.format(1234567890)) #1,234,567,890 #其他类型 主要就是进制了,b、d、o、x分别是二进制、十进制、八进制、十六进制。 print ('{:b}'.format(18)) #二进制 10010 print ('{:d}'.format(18)) #十进制 18 print ('{:o}'.format(18)) #八进制 22 print ('{:x}'.format(18)) #十六进制12
23.frozenset()函数
''' 描述 frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。 语法 frozenset() 函数语法: class frozenset([iterable]) 参数 iterable -- 可迭代的对象,比如列表、字典、元组等等。 返回值 返回新的 frozenset 对象,如果不提供任何参数,默认会生成空集合。 ''' a=frozenset(range(10)) print(a) #输出 frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9}) b=frozenset('ltftyut1234') print(b) #输出 frozenset({'2', '4', 't', 'f', '1', '3', 'l', 'y', 'u'}) # 1 frozenset([iterable]) # 2 set和frozenset最本质的区别是前者是可变的,后者是不可变的。当集合对象会被改变时(例如删除,添加元素),只能使用set, # 3 一般来说使用fronzet的地方都可以使用set。 # 4 参数iterable:可迭代对象。
24.getattr()函数
''' 描述: getattr()函数用于返回一个对象属性值 语法: getattr(object,name,default) 参数: object--对象 name--字符串,对象属性 default--默认返回值,如果不提供该参数,在没有对应属性时,将触发AttributeError。 返回值: 返回对象属性值 ''' class People(): sex='男' def __init__(self,name): self.name=name def peopleinfo(self): print('欢迎%s访问'%self.name) obj=getattr(People,'sex') print(obj) #返回值 男 #obj=getattr(People,'sexage') #print(obj) ''' 报错。。。 Traceback (most recent call last): File "G:/pythonAI/Python_funs/getattr函数详解.py", line 24, in <module> obj=getattr(People,'sexage') AttributeError: type object 'People' has no attribute 'sexage' ''' obj=getattr(People,'sexage',None) print(obj) #返回值 None
25.globals() 函数
''' 描述 globals() 函数会以字典类型返回当前位置的全部全局变量。 语法 globals() 函数语法: globals() 参数 无 返回值 返回全局变量的字典 ''' a='ltftyut1234' print(globals()) # globals 函数返回一个全局变量的字典,包括所有导入的变量。 # {'__name__': '__main__', '__doc__': '\n描述\nglobals() 函数会以字典类型返回当前位置的全部全局变量。\n语法\nglobals() 函数语法:\nglobals()\n参数\n无\n返回值\n返回全局变量的字典\n', '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001C5A50FB4E0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'G:/pythonAI/Python_funs/globals函数详解.py', '__cached__': None, 'a': 'ltftyut1234'} def zero_promo(): return 0 def one_promo(): return 1 def two_promo(): return 2 def hello(): print("Hello") if __name__ == '__main__': promos = [name for name in globals()if name.endswith("_promo")] print(promos) #输出 ['zero_promo', 'one_promo', 'two_promo'] promos = [globals()[name] for name in globals() if name.endswith("_promo")] print(promos[0]()) #输出 0 调用了第一个函数
26.hasattr()函数
''' hasattr()函数用于判断是否包含对应的属性 语法: hasattr(object,name) 参数: object--对象 name--字符串,属性名 返回值: 如果对象有该属性返回True,否则返回False ''' class People(): sex='男' def __init__(self,name): self.name=name def peopleinfo(self): print('欢迎%s访问'%self.name) obj=People('zhangsan') print(hasattr(People,'sex')) #输出 True print('sex'in People.__dict__) #输出 True print(hasattr(obj,'peopleinfo')) #输出 True print(People.__dict__) #输出 {'__module__': '__main__', 'sex': '男', '__init__': <function People.__init__ at 0x0000019931C452F0>, 'peopleinfo': <function People.peopleinfo at 0x0000019931C45378>, '__dict__': <attribute '__dict__' of 'People' objects>, '__weakref__': <attribute '__weakref__' of 'People' objects>, '__doc__': None}
27.hash()函数
''' 描述 hash() 用于获取取一个对象(字符串或者数值等)的哈希值。 语法 hash 语法: hash(object) 参数说明: object -- 对象; 返回值 返回对象的哈希值。 ''' print(hash('test')) #输出 -2950866779904704330 会改变的 print(hash(1)) #数字 输出 1 print(hash(str([1,2,3]))) # 集合 输出 -6217131644886971364 print(hash(str(sorted({'1':1})))) # 字典 输出 -6233802074491902648 ''' hash() 函数可以应用于数字、字符串和对象,不能直接应用于 list、set、dictionary。 在 hash() 对对象使用时,所得的结果不仅和对象的内容有关,还和对象的 id(),也就是内存地址有关。 ''' class Test: def __init__(self, i): self.i = i for i in range(10): t = Test(1) print(hash(t), id(t)) ''' -9223371889060894604 2364702099272 147793883435 2364702134960 -9223371889060894604 2364702099272 147793883435 2364702134960 -9223371889060894604 2364702099272 147793883435 2364702134960 -9223371889060894604 2364702099272 147793883435 2364702134960 -9223371889060894604 2364702099272 147793883435 2364702134960 ''' ''' hash() 函数的用途 hash() 函数的对象字符不管有多长,返回的 hash 值都是固定长度的, 也用于校验程序在传输过程中是否被第三方(木马)修改, 如果程序(字符)在传输过程中被修改hash值即发生变化, 如果没有被修改,则 hash 值和原始的 hash 值吻合, 只要验证 hash 值是否匹配即可验证程序是否带木马(病毒)。 ''' name1='正常程序代码' name2='正常程序代码带病毒' print(hash(name1)) # 2403189487915500087 print(hash(name2)) # -8751655075885266653
28.hex() 函数
''' 描述 hex() 函数将一个整数转换成十六进制字符串。 语法 hex 语法: hex(x) 参数说明: x -- 整数。 返回值 返回十六进制字符串。 ''' print(hex(12)) #输出12的八进制 0xc print(hex(-120)) #输出-12的二进制 -0x78 print(type(hex(12))) #输出oct(12) 的类型 <class 'str'> 所以不能直接计算 print(int(hex(10),base=16)+int(hex(15),base=16)) #输出 25 #base 参数不可为空 为空默认参数为10进制 会报错 ValueError: invalid literal for int() with base 10: '0b1010' #当然了,参数不仅可以接受十进制整数,八进制、十六进制也是可以的,只要是int型数据就合法。 print(hex(0b10010)) #输出0x12 print(hex(0o1357)) #输出0x2ef print(hex(0x2d9)) #输出0x2d9
29id() 函数
''' id() 函数用于获取对象的内存地址。 语法 id 语法: id([object]) 参数说明: object -- 对象。 返回值 返回对象的内存地址。 ''' str='zhangsan' print(id(str)) #输出 1556579882544 动态分配 id 每一次会改变 b=1 print(id(b)) #输出 1597205568 ''' id方法的返回值就是对象的内存地址。 python2中会为每个出现的对象分配内存,哪怕他们的值完全相等(注意是相等不是相同)。 如执行a=2.0,b=2.0这两个语句时会先后为2.0这个Float类型对象分配内存, 然后将a与b分别指向这两个对象。所以a与b指向的不是同一对象 python3中 值相等的变量 内存一样 如下图所示 ''' a=10.21 b=10.21 print(id(a)) #输出2036826247912 print(id(b)) #输出2036826247912 print(a is b) #输出 True print(a == b) #输出 True ''' id 函数 涉及到 浅拷贝和深拷贝的相关知识 深copy和浅copy 深copy新建一个对象重新分配内存地址,复制对象内容。 浅copy不重新分配内存地址,内容指向之前的内存地址。 浅copy如果对象中有引用其他的对象,如果对这个子对象进行修改,子对象的内容就会发生更改。 ''' import copy #这里有子对象 numbers=['1','2','3',['4','5']] #浅copy num1=copy.copy(numbers) #深copy num2=copy.deepcopy(numbers) #直接对对象内容进行修改 num1.append('6') #这里可以看到内容地址发生了偏移,增加了偏移‘6’的地址 print('numbers:',numbers) print('numbers memory address:',id(numbers)) print('numbers[3] memory address',id(numbers[3])) print('num1:',num1) print('num1 memory address:',id(num1)) print('num1[3] memory address',id(num1[3])) num1[3].append('6') print('numbers:',numbers) print('num1:',num1) print('num2',num2) ''' 输出: numbers: ['1', '2', '3', ['4', '5']] numbers memory address: 1556526434888 numbers memory address 1556526434952 num1: ['1', '2', '3', ['4', '5'], '6'] num1 memory address: 1556526454728 num1[3] memory address 1556526434952 numbers: ['1', '2', '3', ['4', '5', '6']] num1: ['1', '2', '3', ['4', '5', '6'], '6'] num2 ['1', '2', '3', ['4', '5']] '''
30.input() 函数
''' Python3.x 中 input() 函数接受一个标准输入数据,返回为 string 类型。 注意:在 Python3.x 中 raw_input() 和 input() 进行了整合, 去除了 raw_input( ),仅保留了input( )函数,其接收任意任性输入, 将所有输入默认为字符串处理,并返回字符串类型。 函数语法 input([prompt]) 参数说明: prompt: 提示信息 ''' a=input('请输入一个数:') #输入 10 print(a) #输出 10 print(type(a)) #输出 <class 'str'> #b=a+10 #报错 TypeError: must be str, not int b=int(a)+10 #转换成整型 print(b) #输出 20 a=input('请输入一个字符串:') #输入 ltf1234 print(a) #输出 字符串ltf1234 可以使用字符串对应的方法 print(a.split('1')) #输出 ['ltf', '234'] split 切割字符串 直接输出列表
31.int()函数
''' int([x[,radix]]) 如果参数是字符串,那么它可能包含符号和小数点。参数radix表示转换的基数(默认是10进制)。 它可以是[2,36]范围内的值,或者0。如果是0,系统将根据字符串内容来解析。 如果提供了参数radix,但参数x并不是一个字符串,将抛出TypeError异常; 否则,参数x必须是数值(普通整数,长整数,浮点数)。通过舍去小数点来转换浮点数。 如果超出了普通整数的表示范围,一个长整数被返回。 如果没有提供参数,函数返回0。 int(x, [base]) 作用: 将一个数字或base类型的字符串转换成整数。 int(x=0) int(x, base=10),base缺省值为10,也就是说不指定base的值时,函数将x按十进制处理。 注: 1. x 可以是数字或字符串,但是base被赋值后 x 只能是字符串 2. x 作为字符串时必须是 base 类型,也就是说 x 变成数字时必须能用 base 进制表示 ''' #1.x是数字 print(int(2.1)) #输出 2 print(int(2e3)) #输出 2000 #print(int(1000,2)) #出错,base 被赋值后函数只接收字符串 #报错 TypeError: int() can't convert non-string with explicit base #2.x是字符串 print(int('abc12',16)) #输出 703506 #print(int('tuifyg',16)) #出错 tuifyg 超过0-9 abcdef 超出16进制 #报错 ValueError: invalid literal for int() with base 16: 'tuifyg' #3. base 可取值范围是 2~36,囊括了所有的英文字母(不区分大小写), # 十六进制中F表示15,那么G将在二十进制中表示16,依此类推....Z在三十六进制中表示35 #print(int('FZ',16)) # 出错,FZ不能用十六进制表示 #报错 ValueError: invalid literal for int() with base 16: 'FZ' print(int('FZ',36)) # 575 #4.字符串 0x 可以出现在十六进制中,视作十六进制的符号, # 同理 0b 可以出现在二进制中,除此之外视作数字 0 和字母 x print(int('0x10', 16)) # 16,0x是十六进制的符号 #print(int('0x10', 17)) # 出错,'0x10'中的 x 被视作英文字母 x print(int('0x10', 36)) # 42804,36进制包含字母 x
32isinstance() 函数
''' isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。 isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型,不考虑继承关系。 isinstance() 会认为子类是一种父类类型,考虑继承关系。 如果要判断两个类型是否相同推荐使用 isinstance()。 语法 以下是 isinstance() 方法的语法: isinstance(object, classinfo) 参数 object -- 实例对象。 classinfo -- 可以是直接或间接类名、基本类型或者有它们组成的元组。 返回值 如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。。 ''' a=2 print(isinstance(a,int)) #返回 True print(isinstance(a,str)) #返回 Fasle print(isinstance(a,(str,int,list))) #返回 True 是元组中的一个类型 就行 class A: pass class B(A): pass print(isinstance(A(), A) ) # returns True print(type(A()) == A ) # returns True print(isinstance(B(), A)) # returns True print(type(B()) == A) # returns False
33.issubclass()函数
''' 描述 issubclass() 方法用于判断参数 class 是否是类型参数 classinfo 的子类。 语法 以下是 issubclass() 方法的语法: issubclass(class, classinfo) 参数 class -- 类。 classinfo -- 类。 返回值 如果 class 是 classinfo 的子类返回 True,否则返回 False。 ''' class A: pass class B(A): pass class C(A): pass print(issubclass(B, A)) # 返回 True print(issubclass(C, A)) # 返回 True print(issubclass(C, B)) # 返回 False #2.class参数是classinfo的子类,并且classinfo是元组 print(issubclass(C, (A, object))) #返回 True print(issubclass(C, (A, int, object))) #返回 True print(issubclass(C, (int, str))) #返回 False print(issubclass(C, (int, str, type))) #返回 False #print(issubclass(C, (1, A))) #报错 TypeError: issubclass() arg 2 must be a class or tuple of classes
34.iter() 函数
''' 描述 iter() 函数用来生成迭代器。 语法 以下是 iter() 方法的语法: iter(object[, sentinel]) 参数 object -- 支持迭代的集合对象。 sentinel -- 如果传递了第二个参数,则参数 object 必须是一个可调用的对象(如,函数),此时,iter 创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用 object。 打开模式 返回值 迭代器对象。 1 iter(o[, sentinel]) 2 返回一个iterator对象。该函数对于第一个参数的解析依赖于第二个参数。 3 如果没有提供第二个参数,参数o必须是一个集合对象,支持遍历功能(__iter__()方法)或支持序列功能(__getitem__()方法), 4 参数为整数,从零开始。如果不支持这两种功能,将处罚TypeError异常。 5 如果提供了第二个参数,参数o必须是一个可调用对象。在这种情况下创建一个iterator对象,每次调用iterator的next()方法来无 6 参数的调用o,如果返回值等于参数sentinel,触发StopIteration异常,否则将返回该值。 ''' lst = [1,2,3,4,5,6,7] for i in iter(lst): print(i) #输出1,2,3,4,5,6,7 class counter: def __init__(self, _start, _end): self.start = _start self.end = _end def get_next(self): s = self.start if(self.start < self.end): self.start += 1 else: raise StopIteration return s c = counter(1, 5) iterator = iter(c.get_next, 3) print(type(iterator)) #返回 <class 'callable_iterator'> for i in iterator: print(i) #输出 1 2
35.lambda()函数
''' 匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序。 lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。 要点: 1,lambda 函数不能包含命令, 2,包含的表达式不能超过一个。 说明:一定非要使用lambda函数;任何能够使用它们的地方,都可以定义一个单独的普通函数来进行替换。 我将它们用在需要封装特殊的、非重用代码上,避免令我的代码充斥着大量单行函数。 lambda匿名函数的格式:冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式。 其实lambda返回值是一个函数的地址,也就是函数对象。 ''' def sum(x,y): return x+y print(sum(4,6)) f=lambda x,y:x+y print(f(4,6)) #这俩个例子的效果是一样的,都是返回x+y a=lambda x:x*x print(a(4)) #传入一个参数的lambda函数 返回x*x b=lambda x,y,z:x+y*z print(b(1,2,3)) #返回x+y*z 即1+2*3=7 #2.方法结合使用 from functools import reduce foo=[2, 18, 9, 22, 17, 24, 8, 12, 27] print(list(filter(lambda x:x%3==0,foo))) #筛选x%3==0 的元素 print(list(map(lambda x:x*2+10,foo))) #遍历foo 每个元素乘2+10 再输出 print(reduce(lambda x,y:x+y,foo)) #返回每个元素相加的和
36.len()函数
''' 描述 Python len() 方法返回对象(字符、列表、元组等)长度或项目个数。 语法 len()方法语法: len( s ) 参数 s -- 对象。 返回值 返回对象长度。 ''' str1='ltf1234' print(len(str1)) #输出 7 list1=[1,2,3,4,5,6,7,8] print(len(list1)) #输出 8 for i in range(len(list1)): print(i) #依次输出1-8 dict = {'num':777,'name':"anne"} print(len(dict)) #输出 2
37.list()函数
''' list() 列表构造函数 1 list([iterable]) 2 list的构造函数。参数iterable是可选的,它可以是序列,支持编译的容器对象,或iterator对象。 3 该函数创建一个元素值,顺序与参数iterable一致的列表。如果参数iterable是一个列表,将创建 4 列表的一个拷贝并返回,就像语句iterables[:]。 ''' list=[1,2,3,4,5,6,7,8,9] #构建列表 print(list) #输出 [1,2,3,4,5,6,7,8,9] list.append(10) #列表追加 10 print(list) #输出 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] list.insert(2,18) #在列表索引为2 的位置 插入 18 其余的后移 print(list) #输出 [1, 2, 18, 3, 4, 5, 6, 7, 8, 9, 10] print(list.count(1)) #输出 列表里1 的数量 list2=[-1,-2,-3] list.extend(list2) #列表追加列表 print(list) #输出 [1, 2, 18, 3, 4, 5, 6, 7, 8, 9, 10, -1, -2, -3] list.remove(1) #删除列表里的第一个1 print(list) #输出 [2, 18, 3, 4, 5, 6, 7, 8, 9, 10, -1, -2, -3] list.sort() #列表排序 print(list) #输出 [-3, -2, -1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 18] list.reverse() #列表反转 print(list) #输出 [18, 10, 9, 8, 7, 6, 5, 4, 3, 2, -1, -2, -3] print(max(list)) #输出列表最大值 18 print(min(list)) #输出列表最小值 -3 list3=[1,2,3,'q','a','s'] #print(max(list3)) #报错 >' not supported between instances of 'str' and 'int' #print(min(list3)) #报错 >' not supported between instances of 'str' and 'int'
38.locals() 函数
''' locals() 函数会以字典类型返回当前位置的全部局部变量。 对于函数, 方法, lambda 函式, 类, 以及实现了 __call__ 方法的类实例, 它都返回 True。 语法 locals() 函数语法: locals() 参数 无 返回值 返回字典类型的局部变量 1 不要修改locals()返回的字典中的内容;改变可能不会影响解析器对局部变量的使用。 2 在函数体内调用locals(),返回的是自由变量。修改自由变量不会影响解析器对变量的使用。 3 不能在类区域内返回自由变量。 ''' def test_py(arg): z=1 print(locals()) test_py(6) #输出 {'z': 1, 'arg': 6} def foo(arg, a): x = 100 y = 'hello python!' for i in range(10): j = 1 k = i print(locals()) foo(1, 2) #输出 {'k': 9, 'j': 1, 'i': 9, 'y': 'hello python!', 'x': 100, 'a': 2, 'arg': 1}
39.map()函数
''' map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list, 并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。 例如,对于list [1, 2, 3, 4, 5, 6, 7, 8, 9] 如果希望把list的每个元素都作平方,就可以用map()函数: 因此,我们只需要传入函数f(x)=x*x,就可以利用map()函数完成这个计算: ''' list=[1,2,3,4,5,6,7,8,9] def f(x): return x*x list1=map(f,list) print(list1) for i in list1: print(i) ''' 注意:map()函数不改变原有的 list,而是返回一个新的 list。 利用map()函数,可以把一个 list 转换为另一个 list,只需要传入转换函数。 由于list包含的元素可以是任何类型,因此,map() 不仅仅可以处理只包含数值的 list, 事实上它可以处理包含任意类型的 list,只要传入的函数f可以处理这种数据类型。 任务 假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则, 请利用map()函数,把一个list(包含若干不规范的英文名字)变成一个包含规范英文名字的 ''' def format_name(s): s1=s[0:1].upper()+s[1:].lower() return s1 names=['adam', 'LISA', 'barT'] print (map(format_name, names)) #python2 这样写可以直接输出列表 for i in map(format_name,names): print(i) #python3 得这样写才可以
40.max()函数
''' 描述 max() 方法返回给定参数的最大值,参数可以为序列。 语法 以下是 max() 方法的语法: max( x, y, z, .... ) 参数 x -- 数值表达式。 y -- 数值表达式。 z -- 数值表达式。 返回值 返回给定参数的最大值。 ''' print ("max(80, 100, 1000) : ", max(80, 100, 1000)) print ("max(-20, 100, 400) : ", max(-20, 100, 400)) print ("max(-80, -20, -10) : ", max(-80, -20, -10)) print ("max(0, 100, -400) : ", max(0, 100, -400)) ''' 输出结果: max(80, 100, 1000) : 1000 max(-20, 100, 400) : 400 max(-80, -20, -10) : -10 max(0, 100, -400) : 100 ''' #1.传入的多个参数的最大值 print(max(1,2,3,4)) #输出 4 #2.传入可迭代对象时,取其元素最大值 s='12345' print(max(s)) #输出 5 #3.传入命名参数key,其为一个函数,用来指定取最大值的方法 s = [ {'name': 'sumcet', 'age': 18}, {'name': 'bbu', 'age': 11} ] a = max(s, key=lambda x: x['age']) print(a) #输出 {'name': 'sumcet', 'age': 18}