内置函数1

内置函数


  python作为一门好用的语言,其内置了许多函数可直接供程序员们调用,以进一步减轻代码负担。python中的内置函数也是在不断发展的,截止到3.6.2版本,python共有内置函数68个。本文将其共分为四类:

  • 作用域
  • 其他相关
  • 迭代器
  • 基础数据类型

见以下详细介绍:

作用域


  • globals:函数以字典的类型返回全部全局变量。
  • locals:函数会以字典的类型返回当前位置的全部局部变量。
    二者均不需传参

# a = 'hiDaLao'
# b = 2
# print(globals())
# print(locals())

# 此时二者一致,因为均在全局空间
{'__name__': '__main__', '__doc__': 'Automatically created module for IPython interactive environment', '__package__': None, '__loader__': None, '__spec__': None, '__builtin__': , '__builtins__': , '_ih': ['', "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())"], '_oh': {}, '_dh': ['D:\\骑士python\\day13'], 'In': ['', "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())"], 'Out': {}, 'get_ipython': >, 'exit': , 'quit': , '_': '', '__': '', '___': '', '_i': '', '_ii': '', '_iii': '', '_i1': "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())", 'a': 'hiDaLao', 'b': 2}
{'__name__': '__main__', '__doc__': 'Automatically created module for IPython interactive environment', '__package__': None, '__loader__': None, '__spec__': None, '__builtin__': , '__builtins__': , '_ih': ['', "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())"], '_oh': {}, '_dh': ['D:\\骑士python\\day13'], 'In': ['', "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())"], 'Out': {}, 'get_ipython': >, 'exit': , 'quit': , '_': '', '__': '', '___': '', '_i': '', '_ii': '', '_iii': '', '_i1': "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())", 'a': 'hiDaLao', 'b': 2}
# def func():
#     a = 'hiDaLao'
#     print(globals())
#     print(locals())
# b = 1
# func()

# 此时二者不同,globals输出了当前所有全局变量(包含内置命名空间),而locals输出的则是其所在的fanc()函数中的全部局部变量{'a': 'hiDaLao'}
{'__name__': '__main__', '__doc__': 'Automatically created module for IPython interactive environment', '__package__': None, '__loader__': None, '__spec__': None, '__builtin__': , '__builtins__': , '_ih': ['', "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())", "def func():\n    a = 'hiDaLao'\n    print(globals())\n    print(locals())\nb = 1\nfunc()"], '_oh': {}, '_dh': ['D:\\骑士python\\day13'], 'In': ['', "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())", "def func():\n    a = 'hiDaLao'\n    print(globals())\n    print(locals())\nb = 1\nfunc()"], 'Out': {}, 'get_ipython': >, 'exit': , 'quit': , '_': '', '__': '', '___': '', '_i': "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())", '_ii': '', '_iii': '', '_i1': "\na = 'hiDaLao'\nb = 2\nprint(globals())\nprint(locals())", 'a': 'hiDaLao', 'b': 1, '_i2': "def func():\n    a = 'hiDaLao'\n    print(globals())\n    print(locals())\nb = 1\nfunc()", 'func': }
{'a': 'hiDaLao'}

其他相关


字符串类型代码的执行

  • eval:执行字符串类型的代码,并返回最终结果
  • exec:执行字符串类型的代码
  • compile:将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval()进行求值

  eval函数单看定义其实挺难理解,但如果同时借助代码来看就会非常清晰了。首先要知道的是eval函数主要作用于字符串类型,当字符串的内容为python中的可执行代码时,我们可以借助eval函数来执行改字符串类型的代码。该函数在文件处理方面大有可为。相见下面代码:

# eval
def func(x):
    return x
print('func("hiDaLao is the best")')
print(eval('func("hiDaLao is the best")'))

b = '1 + 1'
print(b)
print(eval(b))

c = '[i for i in range(1,10)]'
print(c)
print(eval(c))
func("hiDaLao is the best")
hiDaLao is the best
1 + 1
2
[i for i in range(1,10)]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

   exec函数eval函数的定义和用法均较为相似,但最大的不同点是exec函数只执行字符串类型的代码,不返回;而eval函数不仅执行,还会将结果返回给调用者。详细见代码:

# exec
def func1(x):
    return x

print('print("hiDaLao is the best")')      #最外层的print语句里面的所有内容均为字符串
print("---------------")

print(eval('func1("hiDaLao is the best")'))   #遇到
print("---------------")

print(exec('func1("hiDaLao is the best")'))
print("---------------")

print(eval('print("hiDaLao is the best")'))
print("---------------")

print(exec('print("hiDaLao is the best")'))
print("---------------")

exec('print("hiDaLao is the best")')
print("---------------")

eval('print("hiDaLao is the best")')
print("hiDaLao is the best")
---------------
hiDaLao is the best
---------------
None
---------------
hiDaLao is the best
None
---------------
hiDaLao is the best
None
---------------
hiDaLao is the best
---------------
hiDaLao is the best
print(exec('1 + 2'))
None
print(eval('1 + 2'))
3

  compile函数是将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval()进行求值.compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1).下面详细介绍compile中的详细参数:

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

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

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

输入输出相关

  • input:函数接受一个标准输入数据,返回为 string 类型。
  • print:打印输出

input函数之前接触的较多,不多加赘述。唯一需要注意的是input其返回的值均为字符串类型。

a = input('<<<')

print(a,type(a))
<<<(1,2,3)
(1,2,3) 

  print函数,print函数应该是python里面使用最多的内置函数。其源码为:def print(value,*args, sep=' ', end='\n', file=sys.stdout, flush=False),以下对其做详细介绍:

  • file: 默认是输出到屏幕,如果设置为文件句柄,输出到文件
  • sep: 打印多个值之间的分隔符,默认为空格
  • end: 每一次打印的结尾,默认为换行符
  • flush: 立即把内容输出到流文件,不作缓存
with open('print函数','w+',encoding = 'utf-8')as f:
    print(1,2,3,4,file= f)
print('------------')
print(1,2,3,4,sep = '|')
print('------------')
print(1,2,3,4,end = '_')
print(1,2,3,4)
print('------------')
------------
1|2|3|4
------------
1 2 3 4_1 2 3 4
------------

内存相关

  • hash:获取一个对象(可哈希对象:int,str,Bool,tuple)的哈希值。
  • id:用于获取对象的内存地址

  hash函数主要用来获取可哈希对象的哈希地址,此知识应与字典练习起来,字典的key必须为可哈希对象,这也是字典查找速度快的原因。非数字和布尔型变量的hash值为一串等长数字,其均唯一。数字的哈希地址为其本身,不可哈希的数据类型使用该函数会报错。True的哈希地址为1,False的哈希地址为0.

print(hash('haDaLao'))
print(hash('你好python'))
print(hash((1,2,3,4)))
print(hash(True))
print(hash(False))
print(hash(1))
print(hash(134657445474))
-3002480309828225705
-6276695183465522733
485696759010151909
1
0
1
134657445474

  id函数主要用来获取对象的内存地址。

print(id(123))
print(id(2))
1934389280
1934385408

文件操作相关

  • open:函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写
  • __import__:import:函数用于动态加载类和函数
  • help:函数用于查看函数或模块用途的详细说明。

调用相关

  • callable:函数用于检查一个对象是否是可调用的。如果返回True,object仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。
# callable
def func3():
    pass
print(callable(123))
print(callable(func3))
False
True

查看内置属性

  • dir:函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。
#dir
print(dir())
print('--------------')
print(dir([]))
['In', 'Out', '_', '__', '___', '__builtin__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '_dh', '_i', '_i1', '_i10', '_i11', '_i12', '_i2', '_i3', '_i4', '_i5', '_i6', '_i7', '_i8', '_i9', '_ih', '_ii', '_iii', '_oh', 'a', 'exit', 'f', 'func3', 'get_ipython', 'quit']
--------------
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

迭代器生成器相关


  • range:函数可创建一个整数对象,一般用在 for 循环中。
  • iter:内部实际使用了next方法,返回迭代器的下一个项目。
  • next:函数用来生成迭代器(讲一个可迭代对象,生成迭代器
# range
print([i for i in range(9)])
[0, 1, 2, 3, 4, 5, 6, 7, 8]
# iter next
i = iter([1,2,3,4,5])  #获得Iterale
while 1:
    try:
        print(next(i))
    except StopIteration:   # 遇到StopIteration就退出循环    
        break
        
1
2
3
4
5

基础数据类型相关


数字相关

数据类型

  • bool:用于将给定参数转换为布尔类型,如果没有参数,返回 False。
  • int:函数用于将一个字符串或数字转换为整型。
  • float:函数用于将整数和字符串转换成浮点数
  • complex:函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数
# bool  
print(bool(1 < 2 and 3 > 4 or 5 < 6 and 9 > 2 or 3 > 1))
True

int函数,当里面是数字类型时,只取整数部分。当把字符串型数字转化为int型时,只接收整数。

# int 只取整数部分,与round不同
print(int(2.3))
print(int(2.99))
print(int(3/2))
print(int('3.1'))
2
2
1



---------------------------------------------------------------------------

ValueError                                Traceback (most recent call last)

 in ()
      3 print(int(2.99))
      4 print(int(3/2))
----> 5 print(int('3.1'))


ValueError: invalid literal for int() with base 10: '3.1'

float类型与int型类似,complex型日常使用较少,此处不多加介绍。

进制转换

  • bin:将十进制转换成二进制并返回。

  • oct:将十进制转化成八进制字符串并返回。

  • hex:将十进制转化成十六进制字符串并返回

print(bin(11))
print(oct(7))
print(oct(9))
print(hex(9))
print(hex(10))
print(hex(11))
print(hex(12))
print(hex(15))
print(hex(16))
print(hex(17))
0b1011
0o7
0o11
0x9
0xa
0xb
0xc
0xf
0x10
0x11

数学运算

  • abs:函数返回数字的绝对值。

  • divmod:计算除数与被除数的结果,返回一个包含商和余数的元组(a // b, a % b)。

  • round:保留浮点数的小数位数,默认保留整数。

  • pow:求x**y次幂。(三个参数为x**y的结果对z取余)

  • sum:对可迭代对象进行求和计算(可设置初始值)。

  • min:返回可迭代对象的最小值(可加key,key为函数名,通过函数的规则,返回最小值)。

  • max:返回可迭代对象的最大值(可加key,key为函数名,通过函数的规则,返回最大值)。

#abs
print(abs(1))
print(abs(-1))
print('---------')

1
1
---------
#divmod
print(divmod(4,2))
print(divmod(18,7))
(2, 0)
(2, 4)
#round
print(round(3.14159))
print(round(3.14159,3))    #保留三位小数
3
3.142
# pow
print(pow(2,5))
32
# sum
print(sum([1,2,3,4]))
print(sum([1,2,3,4],100))  #设置初始值为1000
10
110

max和min函数有共通之处,其第二个参数可接自定义参数,所以这两个函数的可定制型极强。

# max 与 min
print(min([1,-2,3,4,100,101]))
print(min([1,-2,3,4,100,101]))
print(min([1,-2,3,4,100,101],key=abs))

-2
-2
1
#需求
# [('alex',1000),('太白',18),('wusir',500)]
# 求出年龄最小的那个元组
l = [('alex',1000),('太白',18),('wusir',500)]
def func5(x):
    return x[-1]
print(min(l,key = func5))
('太白', 18)

你可能感兴趣的:(内置函数1)