内置函数

内置函数:python给咱们提供了一些他认为你会经常用到的函数,68种

     内置函数    
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()

 按星级划分

❤ ❤ ❤   死记

locals :函数会以字典的类型返回当前位置的全部局部变量(函数中,返回函数内的变量。函数外,返回全局变量)

globals:函数以字典的类型返回全部全局变量

a = 1
b = 2
def func():
name = 'alex'
age = 12
print(locals()) # {'age': 12, 'name': 'alex'} 局部变量
print(globals()) # {'__name__': '__main__', '__doc__': None, ... 'a': 1, 'b': 2}
func()

globals/locals

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

  pass

print: 打印输出。(step= ‘ ’, end=' ' )

print('alex','echo', sep='|')  # alex|echo  默认是空格
print('', end=' ') # 123 456 不换行
print('')

print用法

open:用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写。

  pass

callable:用于检查一个对象是否是可调用的。True 可调用,False 不可调用

a = 1
def func():
pass
func()
print(callable(func)) #func可调用
print(callable(a)) # False

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

l1 = [1 ,2 ,3 ,4]
print(dir(l1)) # 可以看到__iter__

range:函数可创建一个整数对象,一般用在 for 循环中

  pass

next:内部实际使用了__next__方法,返回迭代器的一个值

  pass

iter:函数用来生成迭代器(将一个可迭代对象,生成迭代器)

l1 = [1 ,2 ,3 ,4]
s1 = iter(l1)
for i in s1:
print(i)

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

  pass

int:函数用于将一个字符串或数字转换为整型。

  pass

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

print(divmod(7,2))  # (3, 1) 7/2  商 3 余 1

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

print(sum([1,2,3]))   #
print(sum((1, 2, 3),100)) #

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

dic = {'a': 3, 'b': 2, 'c': 1}
print(min(dic)) # a 键的最小值
print(min(dic, key=lambda x: dic[x])) # c 最小值得键
print(dic[min(dic, key=lambda x: dic[x])]) # 1 最小值

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

l1 = [('a', 3), ('b', 2), ('c', 1)]
print(max(l1)) # ('c', 1)
print(max(l1, key=lambda x: x[1])) # 取三个元组,拿索引为[1]的值,比较

list:将一个可迭代对象转化成列表(如果是字典,默认将key作为列表的元素)

  pass

tuple:将一个可迭代对象转化成元祖(如果是字典,默认将key作为元祖的元素)

  pass

reversed:将一个序列翻转,并返回此翻转序列的迭代器

ite = reversed(['a',2,3,'c',4,2]) # 将列表反转
print(ite) # 可迭代器<list_reverseiterator object at 0x0000020F7DA27630>
for i in ite:
print(i)

str:将数据转化成字符串

  pass

bytes:用于不同编码之间的转化

s = '你好'
bs = bytes(s,encoding='utf-8')
print(bs)

dict:创建一个字典。

  pass

set:创建一个集合

  pass

len:返回一个对象中元素的个数。

  pass

sorted:对所有可迭代的对象进行排序操作

# 按年龄排倒叙,sorted会创建一个新列表
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
l1 = sorted(students, key=lambda x:x[2], reverse=True)
print(l1)

enumerate:枚举,返回一个枚举对象

dic = {'name':'alex', 'age': 18, 'hobby':'basketball'}
for k in enumerate(dic, start=1):
print(k)
print(enumerate([1, 2, 3]))     # <enumerate object at 0x000001F4D62811B0>
for i in enumerate([1, 2, 3]):
print(i, end='') # (0, 1)(1, 2)(2, 3)
for i in enumerate([1, 2, 3], 100):
print(i, end='') # (100, 1)(101, 2)(102, 3)

zip:将索引相同的元素,组成一个元组

l1 = [1, 2, 3, ]
l2 = ['a', 'b', 'c', 5]
l3 = ('*', '**', (1, 2, 3))
for i in zip(l1, l2, l3):
print(i)
# (1, 'a', '*') 把每个列表索引相同的元素,组成一个元组
# (2, 'b', '**')
# (3, 'c', (1, 2, 3))

filter:过滤·

# filter 过滤 通过你的函数,过滤一个可迭代对象,返回的是True
# 类似于[i for i in range(10) if i > 3] 列表推导式的筛选模式
def func(x): return x % 2 == 0 ret = filter(func, [1, 2, 3, 4, 5, 6, 7])
print(ret) # <filter object at 0x000001FA908F10B8>
for i in ret:
print(i) # 2, 4, 6

map:会根据提供的函数对指定序列做映射

def square(x):  # 计算平方数

    return x ** 2

map(square, [1, 2, 3, 4, 5])  # 计算列表各个元素的平方
# [1, 4, 9, 16, 25]
map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
# [1, 4, 9, 16, 25] # 提供了两个列表,对相同位置的列表数据进行相加
l1 = map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
print(l1) # <map object at 0x000002CEF7F420B8>
for i in l1:
print(i)
# [3, 7, 11, 15, 19]

❤  记住

1.2.1 字符串类型代码的执行 eval,exec,complie  慎用

eval执行字符串类型的代码,并返回最终结果

print(eval('1+2+3'))    #

n=81
eval("n + 4") # eval('print(666)') #

exec:执行字符串类型的代码。

s = '''
for i in [1,2,3]:
print(i)
'''
exec(s) # 直接执行for循环

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) >>> #简单求值表达式用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'"

help:函数用于查看函数或模块用途的详细说明。

print(help(print))

__import__:函数用于动态加载类和函数

  pass

hash:获取一个对象(可哈希对象:int,str,Bool,tuple)的哈希值

str = 'alex'
print(hash(str))

id:用于获取对象的内存地址

  pass

float:函数用于将整数和字符串转换成浮点数

  pass

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

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

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

print(bin(10))   # 0b1010   二进制
print(oct(10)) # 0o12 八进制
print(hex(10)) # 0xa 十六进制

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

print(abs(-5))  # 5 绝对值

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

print(round(7/3,2))  # 2.33 保留2位
print(round(7/3)) # 2 默认保留整数
print(round(3.32567,3)) # 3.326 保留3位

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

print(pow(2,3))  # 两个参数为2**3次幂
print(pow(2,3,3)) # 三个参数为2**3次幂,对3取余

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

set1 = {1, 2, 3, 4}
set1.add(22)
set1 = frozenset(set1)
set1.add(33) # AttributeError: 'frozenset' object has no attribute 'add'
print(set1, type(set1))

all:可迭代对象中,全都是True才是True

any:可迭代对象中,有一个True 就是True

print(all([1,2,True,0]))  # False
print(any([1,'',0])) # True

❤了解 

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

  pass

slice:构造一个切片对象,用于列表的切片 , 定义之后所有的列表的都会改变

li = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
sli_obj = slice(3) # 切片
print(li[sli_obj])
# ['a', 'b', 'c']
sli_obj = slice(0, 7, 2) # 切片 + 步长
print(li[sli_obj])
# ['a', 'c', 'e', 'g']

format:与具体数据相关,用于计算各种小数,精算等  

#字符串可以提供的参数,指定对齐方式,<是左对齐, >是右对齐,^是居中对齐
print(format('test', '<20'))
print(format('test', '>20'))
print(format('test', '^20')) #整形数值可以提供的参数有 'b' 'c' 'd' 'o' 'x' 'X' 'n' None
>>> format(3,'b') #转换成二进制
''
>>> format(97,'c') #转换unicode成字符
'a'
>>> format(11,'d') #转换成10进制
''
>>> format(11,'o') #转换成8进制
''
>>> format(11,'x') #转换成16进制 小写字母表示
'b'
>>> format(11,'X') #转换成16进制 大写字母表示
'B'
>>> format(11,'n') #和d一样
''
>>> format(11) #默认和d一样
'' #浮点数可以提供的参数有 'e' 'E' 'f' 'F' 'g' 'G' 'n' '%' None
>>> format(314159267,'e') #科学计数法,默认保留6位小数
'3.141593e+08'
>>> format(314159267,'0.2e') #科学计数法,指定保留2位小数
'3.14e+08'
>>> format(314159267,'0.2E') #科学计数法,指定保留2位小数,采用大写E表示
'3.14E+08'
>>> format(314159267,'f') #小数点计数法,默认保留6位小数
'314159267.000000'
>>> format(3.14159267000,'f') #小数点计数法,默认保留6位小数
'3.141593'
>>> format(3.14159267000,'0.8f') #小数点计数法,指定保留8位小数
'3.14159267'
>>> format(3.14159267000,'0.10f') #小数点计数法,指定保留10位小数
'3.1415926700'
>>> format(3.14e+1000000,'F') #小数点计数法,无穷大转换成大小字母
'INF' #g的格式化比较特殊,假设p为格式中指定的保留小数位数,先尝试采用科学计数法格式化,得到幂指数exp,如果-4<=exp<p,则采用小数计数法,并保留p-1-exp位小数,否则按小数计数法计数,并按p-1保留小数位数
>>> format(0.00003141566,'.1g') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留0位小数点
'3e-05'
>>> format(0.00003141566,'.2g') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留1位小数点
'3.1e-05'
>>> format(0.00003141566,'.3g') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留2位小数点
'3.14e-05'
>>> format(0.00003141566,'.3G') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科学计数法计数,保留0位小数点,E使用大写
'3.14E-05'
>>> format(3.1415926777,'.1g') #p=1,exp=0 ==》 -4<=exp<p成立,按小数计数法计数,保留0位小数点
''
>>> format(3.1415926777,'.2g') #p=1,exp=0 ==》 -4<=exp<p成立,按小数计数法计数,保留1位小数点
'3.1'
>>> format(3.1415926777,'.3g') #p=1,exp=0 ==》 -4<=exp<p成立,按小数计数法计数,保留2位小数点
'3.14'
>>> format(0.00003141566,'.1n') #和g相同
'3e-05'
>>> format(0.00003141566,'.3n') #和g相同
'3.14e-05'
>>> format(0.00003141566) #和g相同
'3.141566e-05'

bytearry:类似bytes,返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256

ret = bytearray('alex',encoding='utf-8')
print(id(ret)) #
print(ret) # bytearray(b'alex')
print(ret[0]) # 97 a的ascii码
ret[0] = 65
print(ret) # bytearray(b'Alex')
print(id(ret)) #

memoryview

ret = memoryview(bytes('你好',encoding='utf-8'))
print(len(ret)) #
print(ret) # <memory at 0x00000226AD062048>
print(bytes(ret[:3]).decode('utf-8')) # 你
print(bytes(ret[3:]).decode('utf-8')) # 好

ord:输入字符找该字符编码的位置

chr:输入位置数字找出其对应的字符

ascii:是ascii码中的返回该值,不是就返回/u..

# ord 输入字符找该字符编码的位置
print(ord('a')) #
print(ord('中')) # # chr 输入位置数字找出其对应的字符
print(chr(97)) # a
print(chr(20013)) # 中 # 是ascii码中的返回该值,不是就返回\u...
print(ascii('a')) # a
print(ascii('中')) # '\u4e2d'

repr:返回一个对象的string形式(原形毕露)

a = 'nihao '
print(a) # nihao
print(repr(a)) # 'nihao '

装饰器

装饰器: 装饰器的本质是闭包,而且装饰器其实就是一个函数

装饰器:在不改变原函数调用方式上,给原函数增加一些额外的功能。登录验证,写日志,执行效率等时候使用

开放封闭原则:

  对外扩展开放

    为什么要对扩展开放呢?

    我们说,任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改。所以我们必须允许代码扩展、添加新功能

  对内修改封闭 (不允许修改函数

    就像我们刚刚提到的,因为我们写的一个函数,很有可能已经交付给其他人使用了,如果这个时候我们对其进行了修改,很有可能影响其他已经在使用该函数的用户

装饰器完美的遵循了这个开放封闭原则。

#  装饰器的标准格式
def wrapper(f): # f = func
def inner(*args, **kwargs):
'''执行被装饰函数之前的操作'''
ret = f(*args, **kwargs)
# ret = func(*args, **kwargs) ; func()函数开始运行
'''执行被装饰函数之后的操作'''
return ret # 将返回值返回给执行者 inner(),也就是func()
return inner
def wrapper(f):      #  f = func
def inner(*args, **kwargs):
'''执行被装饰函数之前的操作'''
ret = f(*args, **kwargs)
# ret = func(*args, **kwargs) ; func()函数开始运行
'''执行被装饰函数之后的操作'''
return ret # 将返回值返回给执行者 inner(),也就是func()
return inner @wrapper # func = wrapper(func); wrapper()函数开始运行
def func():
print(666)
func() # func() = inner() ; inner()函数开始运行

 

递归函数

import sys
sys.setrecursionlimit(100000)
def func(n):
n += 1
print(n)
func(n)
func(96778)

递归函数,会在内存空间不断开辟新的内存空间,直到占满

import  os
# 遍历该路径下的所有文件
file_list = os.listdir('D:\python')
print('file_list')

读取一个文件下的所有文件和目录

import os

def read(path, n):
file_list = os.listdir(path) # 获取目录下所有文件和目录,通过list返回
for file in file_list:
file_path = os.path.join(path, file) # 将上级文件路径与文件拼接,返回文件路径
if os.path.isdir(file_path): # 判断文件是否是目录
print(' ' * n, file)
read(file_path, n + 1)
else:
print(' ' * n, file) read('D:\study', 0)

day 12 内置函数,装饰器,递归函数的更多相关文章

  1. Python 4 函数的参数,内置函数,装饰器,生成器,迭代器,

    一.函数的参数: 1.位置参数:调用函数时根据函数定义的参数位置来传递参数. 2.关键字参数:用于函数调用,通过“键-值”形式加以指定.可以让函数更加清晰.容易使用,同时也清除了参数的顺序需求. 3. ...

  2. Python---12函数式编程------12.3匿名函数&装饰器&偏函数

    一.匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时,除了定义一个f( ...

  3. django 内置用户-装饰器

    """ 一.如何给python内置用户添加额外的字段,注意一定义在没有迁移数据之前定义,否则会报错 1.在models中先调用 from django.contrib.a ...

  4. Python—内置三大装饰器(@staticmethod、@classmethod、@property)

    https://blog.csdn.net/weixin_42681866/article/details/83376484 https://blog.csdn.net/weixin_43265804 ...

  5. python学习之路-4 内置函数和装饰器

    本篇涉及内容 内置函数 装饰器 内置函数 callable()   判断对象是否可以被调用,返回一个布尔值 1 2 3 4 5 6 7 8 9 10 11 num = 10 print(callabl ...

  6. Python开发【第四篇】: 三大器和内置函数

    内容概要 函数名 闭包 迭代器 生成器 推导式与表达式 内置函数 装饰器 初识递归 1.函数名 函数名的运用: 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量. 01. 函数名的 ...

  7. Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器)

    Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器) 1.初始函数 2.函数嵌套及作用域 3.装饰器 4.迭代器和生成器 6.内置函数 7.递归函数 8.匿名函数

  8. Python之函数目录(自定义函数,内置函数,装饰器,迭代器,生成器)

    1.初始函数 2.函数嵌套及作用域 3.装饰器 4.迭代器和生成器 6.内置函数 7.递归函数 8.匿名函数 9.函数相关定义 10.三元表达式.列表推导式.生成器表达式 11.函数与方法的区别  

  9. Python菜鸟之路:Python基础-内置函数补充

    常用内置函数及用法: 1. callable() def callable(i_e_, some_kind_of_function): # real signature unknown; restor ...

随机推荐

  1. Lazarus的DBGrid中回车键的处理

    Lazarus的DBGrid中回车键默认行为是向下移动一个记录,如果想对这一事件做处理,请不要在onkeypress里处理,而在onkeydown事件里处理.

  2. 用ADO操作数据库的方法步骤(ZT)

    http://www.cppblog.com/changshoumeng/articles/113437.html 学习ADO时总结的一些经验 用ADO操作数据库的方法步骤 ADO接口简介 ADO库包 ...

  3. 国内Maven仓库 - 2018年5月2日15:54:10

    <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> & ...

  4. Java swing 项目写成bat文件

    java  -Dfile.encoding=GBK -Xms512m -Xmx512m -cp .;.\lib\*  com.bozhirui.show.TableIn 以上为bat 文件的所有内容 ...

  5. centos 下安装redis

    一.安装redis 第一步:下载redis安装包 redis下载地址 wget http://download.redis.io/releases/redis-5.0.3.tar.gz 第二步:解压压 ...

  6. poj2480-Longge's problem-(欧拉函数)

    Longge is good at mathematics and he likes to think about hard mathematical problems which will be s ...

  7. Winform 对话框

    ColorDialog:显示可用颜色,以及用户可以自定义颜色的控件,以调色板对话框形式出现,可选择更改字体颜色 FolderBrowserDialog:显示一个对话框,提示用户选择文件夹 FontDi ...

  8. putty 链接亚马逊服务器

    使用 PuTTY 从 Windows 连接到亚马逊云的 Linux 实例 转载 2016年07月22日 14:09:47   使用 PuTTY 从 Windows 连接到亚马逊云的 Linux 实例 ...

  9. pip 离线安装

    pip download ansible -d . --trusted-host mirrors.aliyun.com pip install ansible-2.7.5.tar.gz  --user ...

  10. 输入框状态禁止enter键提交表单

    1:页面中如果存在input输入框和submit提交按钮时,默认按enter键会提交表单,如果我现在在做查询操作,一不小心按了enter键就会有提交表单的操作,这样显然是不合理的,所以我们要禁止按en ...