内置函数与匿名函数

内置函数

截止到python版本3.6.2,现在python一共为我们提供了68个内置函数。它们就是python提供给你直接可以拿来使用的所有函数。

  Built-in Functions  
abs()dict()help()min()setattr()
all()dir()hex()next()slice()
any()divmod()id()object()sorted()
ascii()enumerate()input()oct()staticmethod()
bin()eval()int()open()str()
bool()exec()isinstance()ord()sum()
bytearray()filter()issubclass()pow()super()
bytes()float()iter()print()tuple()
callable()format()len()property()type()
chr()frozenset()list()range()vars()
classmethod()getattr()locals()repr()zip()
compile()globals()map()reversed()__import__()
complex()hasattr()max()round() 
delattr()hash()memoryview()set() 

详细的功能说明请参阅:http://www.runoob.com/python/python-built-in-functions.html

作用域相关

globals()

获取全局变量的字典

locals()

获取执行本方法所在命名空间内的局部变量的字典

字符串类型代码的执行

字符串类型执行相关

eval()

功能:将字符串str当成有效的表达式来求值并返回计算结果。
语法: eval(source[, globals[, locals]]) -> value
参数:source:一个Python表达式或函数compile()返回的代码对象globals:可选。 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。locals:可选。 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。
可以把list,tuple,dict和string相互转化。
#################################################
字符串转换成列表
a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
type(a)
# <type 'str'>
b = eval(a)
print(b)
# [[1, 2], [3, 4], [5, 6], [7, 8], [9, 0]]
type(b)
# <type 'list'>
#################################################
字符串转换成字典
a = "{1: 'a', 2: 'b'}"
type(a)
# <type 'str'>
b = eval(a)
print(b)
#{1: 'a', 2: 'b'}
type(b)
# <type 'dict'>
#################################################
字符串转换成元组
a = "([1,2], [3,4], [5,6], [7,8], (9,0))"
type(a)
# <type 'str'>
b = eval(a)
print (b)
([1, 2], [3, 4], [5, 6], [7, 8], (9, 0))
type(b)
# <type 'tuple'># 计算公式值x = 7 eval( '3 * x' ) # 21 eval('pow(2,2)') # 4eval('2 + 2') # 4
View Code

exec()

功能: exec 执行储存在字符串或文件中的 Python 语句,相比于 eval,exec可以执行更复杂的 Python 代码。

语法:    exec(object[, globals[, locals]])

 参数:  object:必选参数,表示需要被指定的Python代码。它必须是字符串或code对象。如果object是一个字符串,该字符串会先被解析为一组Python语句,然后在执行(除非发生语法错误)。如果                            object是一个code对象,那么它只是被简单的执行。

globals:可选参数,表示全局命名空间(存放全局变量),如果被提供,则必须是一个字典对象。

 locals:可选参数,表示当前局部命名空间(存放局部变量),如果被提供,可以是任何映射对象。如果该参数被忽略,那么它将会取与globals相同的值。

exec 返回值永远为 None。

>>>exec('print("Hello World")')
Hello World
# 单行语句字符串
>>> exec("print ('runoob.com')")
runoob.com
 
#  多行语句字符串
>>> exec ("""for i in range(5):
...     print ("iter time: %d" % i)
... """)
iter time: 0
iter time: 1
iter time: 2
iter time: 3
iter time: 4


x = 10
expr = """
z = 30
sum = x + y + z
print(sum)
"""
def func():
    y = 20
    exec(expr)
    exec(expr, {'x': 1, 'y': 2})
    exec(expr, {'x': 1, 'y': 2}, {'y': 3, 'z': 4})
    
func()
60
33
34

  

code = '''
import os 
print(os.path.abspath('.'))
'''
code = '''
print(123)
a = 20
print(a)
'''
a = 10
exec(code,{'print':print},)
print(a)

compile()

将字符串类型的代码编译,代码对象能够通过exec语句来执行或者eval()进行求值

参数说明:   

1. 参数source:字符串或者AST(Abstract Syntax Trees)对象。即需要动态执行的代码段。  

2. 参数 filename:代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。当传入了source参数时,filename参数传入空字符即可。  

3. 参数model:指定编译代码的种类,可以指定为 ‘exec’,’eval’,’single’。当source中包含流程语句时,model应指定为‘exec’;当source中只包含一个简单的求值表达式,model应指定为‘eval’;当source中包含了交互式命令语句,model应指定为'single'。

>>> #流程语句使用exec
>>> code1 = 'for i in range(0,10): print (i)'
>>> compile1 = compile(code1,'','exec')
>>> exec (compile1)
1
3
5
7
9

>>> #简单求值表达式用eval
>>> code2 = '1 + 2 + 3 + 4'
>>> compile2 = compile(code2,'','eval')
>>> eval(compile2)


>>> #交互语句用single
>>> code3 = 'name = input("please input your name:")'
>>> compile3 = compile(code3,'','single')
>>> name #执行前name变量不存在
Traceback (most recent call last):
  File "<pyshell#29>", line 1, in <module>
    name
NameError: name 'name' is not defined
>>> exec(compile3) #执行时显示交互命令,提示输入
please input your name:'pythoner'
>>> name #执行后name变量有值
"'pythoner'"
View Code 

输入输出相关

input() 

s = input("请输入内容 : ")  #输入的内容赋值给s变量
print(s)  #输入什么打印什么。数据类型是str
View Code

print() 

def print(self, *args, sep=' ', end='\n', file=None): # known special case of print
    """
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
    file:  默认是输出到屏幕,如果设置为文件句柄,输出到文件
    sep:   打印多个值之间的分隔符,默认为空格
    end:   每一次打印的结尾,默认为换行符
    flush: 立即把内容输出到流文件,不作缓存
    """

import time
for i in range(0,101,2):  
     time.sleep(0.1)
     char_num = i//2      #打印多少个'*'
     per_str = '\r%s%% : %s\n' % (i, '*' * char_num) if i == 100 else '\r%s%% : %s'%(i,'*'*char_num)
     print(per_str,end='', flush=True)

# \r 可以把光标移动到行首但不换行

类与对象相关

type() 

返回变量的数据类型

id()

返回一个变量的内存地址

hash() 

返回一个可hash变量的哈希值,不可hash的变量被hash之后会报错。

t = (1,2,3)
l = [1,2,3]
print(hash(t))  #可hash
print(hash(l))  #会报错

'''
结果:
TypeError: unhashable type: 'list'
'''
View Code

hash函数会根据一个内部的算法对当前可hash变量进行处理,返回一个int数字。

*每一次执行程序,内容相同的变量hash值在这一次执行过程中不会发生改变。

basestring()

方法是 str 和 unicode 的超类(父类),也是抽象类,因此不能被调用和实例化,但可以被用来判断一个对象是否为 str 或者 unicode 的实例,isinstance(obj, basestring) 等价于 isinstance(obj, (str, unicode))。

没有返回值

bool()

函数用于将给定参数转换为布尔类型,如果没有参数,返回 False。

bool 是 int 的子类。

>>> issubclass(boolint) # bool 是 int 子类 True

bytearray() 方法返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256。

callable() 

函数用于检查一个对象是否是可调用的。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。

对于函数, 方法, lambda 函式, 类, 以及实现了 __call__ 方法的类实例, 它都返回 True。 

cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。

delattr() 

用于删除属性。

delattr(x, 'foobar') 相等于 del x.foobar

dir()

函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息

返回模块的属性列表

getattr()

函数用于返回一个对象属性值

getattr 语法:

getattr(object, name[, default])
  • object -- 对象。
  • name -- 字符串,对象属性。
  • default -- 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。

hasattr()

函数用于判断对象是否包含对应的属性

文件操作相关

open() 

打开一个文件,返回一个文件操作符(文件句柄)

操作文件的模式有r,w,a,r+,w+,a+ 共6种,每一种方式都可以用二进制的形式操作(rb,wb,ab,rb+,wb+,ab+)

可以用encoding指定编码.

模块操作相关

__import__

导入一个模块

import time
os = __import__('os')
print(os.path.abspath('.'))

帮助相关

help()

在控制台执行help()进入帮助模式。可以随意输入变量或者变量的类型。输入q退出

或者直接执行help(o),o是参数,查看和变量o有关的操作。。。

调用相关

callable()

看这个变量是不是可调用。

如果参数是一个函数名,就会返回True

def func():pass
print(callable(func))  #参数是函数名,可调用,返回True
print(callable(123))   #参数是数字,不可调用,返回False
View Code

查看参数所属类型的所有内置方法

dir() 

内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回,默认查看全局空间内的属性,也接受一个参数,查看这个参数内的方法或变量

print(dir(list))  #查看列表的内置方法
print(dir(int))  #查看整数的内置方法

>>> import fibo, sys
>>> dir(fibo)
['__name__', 'fib', 'fib2']
>>> dir(sys)  
['__displayhook__', '__doc__', '__excepthook__', '__loader__', '__name__',
 '__package__', '__stderr__', '__stdin__', '__stdout__',
 '_clear_type_cache', '_current_frames', '_debugmallocstats', '_getframe',
 '_home', '_mercurial', '_xoptions', 'abiflags', 'api_version', 'argv',
 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder',
 'call_tracing', 'callstats', 'copyright', 'displayhook',
 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix',
 'executable', 'exit', 'flags', 'float_info', 'float_repr_style',
 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags',
 'getfilesystemencoding', 'getobjects', 'getprofile', 'getrecursionlimit',
 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettotalrefcount',
 'gettrace', 'hash_info', 'hexversion', 'implementation', 'int_info',
 'intern', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path',
 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1',
 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit',
 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout',
 'thread_info', 'version', 'version_info', 'warnoptions']

如果没有给定参数,那么 dir() 函数会罗列出当前定义的所有名称:
>>> a = [1, 2, 3, 4, 5]
>>> import fibo
>>> fib = fibo.fib
>>> dir() # 得到一个当前模块中定义的属性列表
['__builtins__', '__name__', 'a', 'fib', 'fibo', 'sys']
>>> a = 5 # 建立一个新的变量 'a'
>>> dir()
['__builtins__', '__doc__', '__name__', 'a', 'sys']
>>>
>>> del a # 删除变量名a
>>>
>>> dir()
['__builtins__', '__doc__', '__name__', 'sys']
>>>
View Code

数字相关

数字——数据类型相关

bool

int

float

complex()

函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数。

数字——进制转换相关

bin()

返回一个整数int 或者长整数 long int 的二进制表示

oct

hex

数字——数学运算

abs()

函数返回数字的绝对值

divmod

() 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)。

在 python 2.3 版本之前不允许处理复数

,min,max,sum,round,pow

数据结构相关

list

tuple

str

format

bytes

bytearry

memoryview

ord

chr

ascii

repr

ret = bytearray('alex',encoding='utf-8')
print(id(ret))
print(ret[0])
ret[0] = 65
print(ret)
print(id(ret))
View Code
ret = memoryview(bytes('你好',encoding='utf-8'))
print(len(ret))
print(bytes(ret[:3]).decode('utf-8'))
print(bytes(ret[3:]).decode('utf-8'))
View Code

reversed

slice

l = (1,2,23,213,5612,342,43)
print(l)
print(list(reversed(l)))
View Code
l = (1,2,23,213,5612,342,43)
sli = slice(1,5,2)
print(l[sli])
View Code

dict

set

frozenset()
功能:返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。

语法:class frozenset([iterable])

参数: iterable – 可迭代的对象,比如列表、字典、元组等等 

返回新的 frozenset 对象,如果不提供任何参数,默认会生成空集合。

示例:

>>> a = frozenset(range(10))
# 生成一个新的不可变集合
>>> a
frozenset([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> b = frozenset('runoob')
>>> b
frozenset(['b', 'r', 'u', 'o', 'n'])
View Code

匿名函数lambda

匿名函数:为了解决那些功能很简单的需求而设计的一句话函数

#这段代码
def calc(n):
    return n**n
print(calc(10))
 
#换成匿名函数
calc = lambda n:n**n
print(calc(10))
View Code
函数名 = lambda 参数 :返回值

#参数可以有多个,用逗号隔开
#匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
#返回值和正常的函数一样可以是任意数据类型
View Code

我们可以看出,匿名函数并不是真的不能有名字。

匿名函数的调用和正常的调用也没有什么分别。 就是 函数名(参数) 就可以了~~~

练一练:

请把以下函数变成匿名函数
def add(x,y):
    return x+y

res=lambda x,y:x+y
print(res(1,3))
View Code

上面是匿名函数的函数用法。除此之外,匿名函数也不是浪得虚名,它真的可以匿名。在和其他功能函数合作的时候

数据集合

len()

max()

salaries = {
    'egon': 3000,
    'alex': 100000000,
    'wupeiqi': 10000,
    'yuanhao': 2000
}

# nums=[10,-1,11,9,23]
# print(max(nums))
# print(max(salaries.values()))

# key=函数的内存地址: 作用是控制max函数的比较的值
# def func(k):
#     return salaries[k]

# print(max(salaries,key=func))
# 1. 将可迭代对象salaries变成迭代器对象iter_obj
# 2. next(iter_obj)得到一个人名,然后将该人名当作参数传给key指定的函数,
#    然后调用函数将函数的返回值当作比较依据
# 3. 比较大小,取出最大值对应的人名
# print(max(salaries,key=lambda k:salaries[k]))
# print(min(salaries,key=lambda k:salaries[k]))
View Code

sorted()

功能: 对List、Dict进行排序,Python提供了两个方法
           对给定的List L进行排序,
          方法1.用List的成员函数sort进行排序,在本地进行排序,不返回副本
          方法2.用built-in函数sorted进行排序(从2.4开始),返回副本,原始输入不变

语法:sorted(iterable, key=None, reverse=False)

参数说明:
        iterable:是可迭代类型;
        key:传入一个函数名,函数的参数是可迭代类型中的每一项,根据函数的返回值大小排序;
        reverse:排序规则. reverse = True 降序 或者 reverse = False 升序,有默认值。
返回值:有序列表

sort 与 sorted 区别: sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。 list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作

列表按照其中每一个值的绝对值排序

l1 = [1,3,5,-2,-4,-6]
l2 = sorted(l1,key=abs)
print(11)
print(12)

列表按照每一个元素的len排序

l = [[1,2],[3,4,5,6],(7,),'123']
print(sorted(l,key=len))

与匿名函数一起使用
nums=[10,-1,11,9,23]
print(sorted(nums))
print(nums)

salaries={
'egon':3000,
'alex':100000000,
 'wupeiqi':10000,
'yuanhao':2000
}
print(sorted(salaries,key=lambda k:salaries[k]))
print(sorted(salaries,key=lambda k:salaries[k],reverse=True))
View Code

enumerate()

函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

Python 2.3. 以上版本可用,2.6 添加 start 参数

list(enumerate(seasonsstart=1)) # 下标从 1 开始 [(1'Spring')(2'Summer')(3'Fall')(4'Winter')]

all()

函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False。

如果iterable的所有元素不为0、''、False或者iterable为空,all(iterable)返回True,否则返回False;

注意:空元组、空列表返回值为True,这里要特别注意。

any()

函数用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True。

元素除了是 0、空、FALSE 外都算 TRUE。

如果都为空、0、false,则返回false,如果不都为空、0、false,则返回true。

zip()

函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。

返回元组列表

map()

功能:会根据提供的函数对指定序列做映射。
                 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

语法:map(function, iterable, ...)

参数:function -- 函数
          iterable -- 一个或多个序列
             
返回值:
               Python 2.x 返回列表。
               Python 3.x 返回迭代器

Python中的map函数应用于每一个可迭代的项,返回的是一个结果list。如果有其他的可迭代参数传进来,map函数则会把每一个参数都以相应的处理函数进行迭代处理。map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。

有一个list, L = [1,2,3,4,5,6,7,8],我们要将f(x)=x^2作用于这个list上,那么我们可以使用map函数处理。


>>> L = [1,2,3,4,] 
>>> def pow2(x): 
... return x*x 
... 
>>> list(map(pow2,L))
[1, 4, 9, 16] 
View Code

reduce()

功能:reduce() 函数会对参数序列中元素进行累积。

语法:reduce(function, iterable[, initializer])

参数:    function -- 函数,有两个参数

            iterable -- 可迭代对象
            initializer -- 可选,初始参数
返回值: 返回函数计算结果
       函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

方式一:手动实现
res=0
for i in range(101):
 res+=i
 print(res)

方式二:列表生成式
print(sum([i for i in range(101)]))

方式三:reduce+匿名函数
from functools import reduce
print(reduce(lambda x,y:x+y,[i for i in range(101)],100))
print(reduce(lambda x,y:x+y,[i for i in range(101)]))
print(reduce(lambda x,y:x+y,['h','e','l','l','o'],'----------'))
View Code

filter()

功能:  函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

语法 :    filter(function, iterable)
参数:  function -- 判断函数。
             iterable -- 可迭代对象。
接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
注意: Pyhton2.7 返回列表,Python3.x 返回迭代器对象

例如,要从一个list [1, 4, 6, 7, 9, 12, 17]中删除偶数,保留奇数,首先,要编写一个判断奇数的函数:

def is_odd(x):
  return x % 2 == 1
然后,利用filter()过滤掉偶数:

>>>list(filter(is_odd, [1, 4, 6, 7, 9, 12, 17]))

输出  [1, 7, 9, 17]
利用filter(),可以完成很多有用的功能,例如,删除 None 或者空字符串:

def is_not_empty(s):
  return s and len(s.strip()) > 0
>>>list(filter(is_not_empty, ['test', None, '', 'str', ' ', 'END']))

输出    ['test', 'str', 'END']
注意: s.strip(rm) 删除 s 字符串中开头、结尾处的 rm 序列的字符。

当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' '),如下:

>>> a = ' 123'
>>> a.strip()
'123'

>>> a = '\t\t123\r\n'
>>> a.strip()
'123'

练习:请利用filter()过滤出1~100中平方根是整数的数,即结果应该是:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

方法:
import math
def is_sqr(x):
  return math.sqrt(x) % 1 == 0
print(list(filter(is_sqr, range(1, 101))))

结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

与匿名函数一起使用
res = filter(lambda x:x>10,[5,8,11,9,15])
for i in res:
    print(i)

输出
11
View Code

匿名函数应用中遇到的大坑:

li = [lambda :x  for x in range(10)]
res = li[0]()
print(res)

输出都是:9(所有都是返回9,如res = li[1]() --> 9)

首先,需要解释一些基本知识:
函数在定义的时候,并没有分配内存空间用来保存任何变量的值,只有在执行的时候,才会分配空间,保存变量的值。
然后,这是一个列表解析表达式,每个元素都是一个函数,每个函数返回的是x的值。
所以,这是一个列表,有10个元素,每个元素都是一个函数,函数体是返回x的值,前面说过,没有执行的时候,x是没有值的。

所以,当去执行这个列表中的某个函数的时候,函数就去取这个x的值,那么x的值已经变为9了。因为for循环执行完毕了,x最后变成了9。

循环在python中是没有作用域的概念的,这里的10个函数都会(都可以)引用同一个x(for的那个x),所以在向列表中添加func的时候,并没有保存 i 的值,而是当执行函数( li[0]())的时候才去取,这时候循环已经结束,i 的值是 9,所以结果都是9。
即是:li这个列表只是有10个函数,而每个函数体的x变量,引用的都是for的那个x,而for的这个x最后变成了9。

再进一步解释循环的作用域问题:
当 Python 遇到一个变量的话他会按照这样的顺序进行搜索:
本地作用域(Local)→外围作用域——即当前作用域是一个内嵌作用域(Enclosing locals)→全局/模块作用域(Global)→内置作用域(Built-in)。
全局作用域(Global)就是模块内的作用域,他的作用范围是单一文件内。

也就是说for循环中的target list(for x in range(10) x 就是target list)在循环结束中并未被删除,可以被后续程序直接使用。但除一种情况外:循环序列为空时,target list根本不会被赋值。

PYTHON的作用域由def、class、lambda等语句产生,iftry、for等语句并不会产生新的作用域。变量名引用分为三个作用域进行查找:首先是本地,然后是函数内(如果有的话),之后是全局,最后是内置。
View Code
flist=[]
for i in range(3):
  def makefunc(i):
    def func(x):
      return x*i
    return func
  flist.append(makefunc(i))

for f in flist:
  print (f(2))

在func外面再定义一个makefunc函数,func形成闭包,结果就正确了。
输出:0   2   4 。就是利用闭包技术,保存 i 的值。
所以,记得:返回闭包时牢记的一点就是:返回函数不要引用任何循环变量,或者后续会发生变化的变量。
如果一定要引用循环变量怎么办?方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变。
利用闭包技术保存i的值

其他内置函数

execfile()

函数可以用来执行一个文件

frozenset()

返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。

frozenset() 函数语法

class frozenset([iterable])

hash()

用于获取取一个对象(字符串或者数值等)的哈希值

locals()

函数会以字典类型返回当前位置的全部局部变量。

对于函数, 方法, lambda 函式, 类, 以及实现了 __call__ 方法的类实例, 它都返回 True

>>>def runoob(arg): # 两个局部变量:arg、z ... z = 1 ... print (locals()) ... >>> runoob(4) {'z': 1, 'arg': 4} # 返回一个名字/值对的字典

pow()

方法返回 xy(x的y次方) 的值

repr() 函数将对象转化为供解释器读取的形式

round() 方法返回浮点数x的四舍五入值

setattr() 函数对应函数 getattr(),用于设置属性值,该属性必须存在

>>>class A(object): ... bar = 1 ... >>> a = A() >>> getattr(a, 'bar') # 获取属性 bar 值 1 >>> setattr(a, 'bar', 5) # 设置属性 bar 值 >>> a.bar 5

slice() 函数实现切片对象,主要用在切片操作函数里的参数传递

slice 语法:

class slice(stop)
class slice(start, stop[, step])

super()

函数是用于调用父类(超类)的一个方法。

super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。

MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表

Python3.x 和 Python2.x 的一个区别是: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx :

Python3.x 实例:

class A:
    pass
class B(A):
    def add(self, x):
        super().add(x)

vars()

函数返回对象object的属性和属性值的字典对象

返回对象object的属性和属性值的字典对象,如果没有参数,就打印当前调用位置的属性和属性值 类似 locals()

面试题

现有两个元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]

答案一
test = lambda t1,t2 :[{i:j} for i,j in zip(t1,t2)]
print(test(t1,t2))
答案二
print(list(map(lambda t:{t[0]:t[1]},zip(t1,t2))))
还可以这样写
print([{i:j} for i,j in zip(t1,t2)])

  

 

转载于:https://www.cnblogs.com/596014054-yangdongsheng/p/9739509.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值