五、python函数、装饰器、内置函数、json及模块

一、递归调用

1.一个函数自己调用自己就是递归调用,最多一个函数递归调用自己999次,超过就会出错
2.递归必须有一个明确的结束条件
3.每次进入更深一层递归时,问题规模相比上次递归都应有所减少
4.递归效率不高,少用递归

eg:def test1():    num = int(input(‘please enter a number:‘))    if num%2==0:#判断输入的数字是不是偶数       return True #如果是偶数的话,程序就退出了,返回true    print(‘不是偶数请重新输入!‘)    return test1()#如果不是偶数的话继续调用自己,输入值test1()#这样为什么不返回return# print(test1())#调用test

二、高阶函数

1.如果一个函数的入参是一个函数名的话,那么这个函数就是高阶函数
2.函数即变量

eg:def hello(name):    print(name)new_hello = helloprint(type(hello))print(type(new_hello))hello(‘hello..‘)new_hello(‘new_hello‘)
eg1:#如果不明白函数即变量,就看这里def add(x,y,z):#如果一个函数的入参是一个函数名的话,那么这个函数就是高阶函数    #参数z是要传入一个函数名    res = z(x)+z(y)    return resprint(add(‘98‘,‘100‘,int))

三、python内置函数的用法

1、作用域

1??函数的作用域,是就近原则,从里往外找,如果自己函数里有,就拿过去用,如果自己的函数里面没有的话,就去它父级函数里面找
2??函数只有被调用才会被执行

eg:name = ‘python‘def warpper():    name = ‘wubing‘    def deco():        name = ‘陈冬瓜‘        print(‘我在里面%s‘%name)        def hhh():            name = ‘zhangying‘            print(‘www%s‘%name)        hhh()    deco()    print(‘外面的name是%s‘%name)warpper()

2、装饰器

1??函数里面也可以嵌套的定义一个函数
2??高阶函数
a.装饰器说白了就是函数嵌套+高阶函数
b.装饰器的作用就是不改变原有函数的调用方式,入参的情况下,给函数添加新功能
c.偷偷摸摸的给函数加上新功能,但是不改变原来的函数

eg1:import timedef run():    print(‘run。。‘)    time.sleep(1)def run_time(func):    start_time = time.time()#开始时间    func()    end_time = time.time()#结束时间    print(‘run函数运行是‘,end_time-start_time)run_time(run)
eg2:import timedef timer(func):    def deco(*args,**kwargs):        #*args,**kwargs用来接收传入函数的参数        start_time = time.time()        res = func(*args,**kwargs)        end_time = time.time()        print(‘runtime‘,end_time-start_time)        return res    return deco@timer#==rundef run():    print(‘run。。‘)    time.sleep(1)run = timer(run)#run == decorun()@timerdef run2(name):    print(name)    time.sleep(2)run2(‘niuhanyang‘)

上面这个函数其实就是返回了一个函数名而已
1.调用timer函数的时候,要传入一个方法名,timer函数在函数内部定义了一个函数叫作deco,又在函数deco函数内部调用了timer里面传入的方法
2.run保存的是deco,deco是一个函数,调用r就是调用deco

3、内置函数

print(all([1,2,3,4]))#判断可迭代的对象里面的值是否都为真print(any([0,0,0,0,0]))#判断可迭代的对象里面的值是否有一个为真print(bin(10))#十进制转二进制下面这些函数都是强制类型转换print(bool(‘s‘))#把一个对象转换成布尔类型int()#整形float()#小数str()#zifucdict()#字典list()#列表set()#集合tuple()#元组def func():    passprint(callable(func))#判断传入的对象是否可调用print(chr(98))#打印数字对应的asciiprint(ord(‘b‘))#打印字符串对应的ascii码print(dict(a=1,b=2))#转换字典print(dir(‘a‘))#打印传入对象的可调用方法

print(eval(‘a=1‘))执行python代码,只能执行简单的,定义数据类型和运算print(exec(‘def a():pass‘))#执行python代码def func(num):    name = ‘88‘    print(locals())    print(globals())    return numfunc(11)print(list(filter(func,[0,1,2,3,4])))#在python3里面这么用是没问题print(filter(func,[0,1,2,3,4]))#在python2里面这么用是没问题

filter(func,[1,2,3,4])根据前面的函数处理逻辑,依次处理后面可迭代对象里面的每个元素,返回true保存print(list(map(func, [0,1, 2, 3, 4])))根据前面的函数处理逻辑,依次处理后面可迭代对象里面的每个元素,保存前面函数返回的所有结果 </span>

print(globals())#返回程序内所有的变量,返回的是一个字典,函数里面的局部变量不会返回print(locals())#返回局部变量print(hex(111))#数字转成16进制print(max(111,12,13,14,16,19))#取最大值print(oct(111))#把数字转换成8进制print(round(11.1198,2))#取几位小数,会四舍五入print(sorted([2,31,34,6,1,23,4],reverse=False))#排序

dic={1:2,3:4,5:6,7:8}print(sorted(dic.items()))#按照字典的key排序print(sorted(dic.items(),key=lambda x:x[1]))#按照字典的value排序__import__(‘decorator‘)#导入一个模块

下面的是必须要会的print(bool(‘s‘))#把一个对象转换成布尔类型int()#整形float()#小数str()#zifucdict()#字典list()#列表set()#集合tuple()#元组print(round(11.1198,2))#取几位小数,会四舍五入print(sorted([2,31,34,6,1,23,4],reverse=False))#排序# print(max(111,12,13,14,16,19))#取最大值print(list(filter(func,[0,1,2,3,4])))#在python3里面这么用是没问题print(filter(func,[0,1,2,3,4]))#在python2里面这么用是没问题filter(func,[1,2,3,4])根据前面的函数处理逻辑,依次处理后面可迭代对象里面的每个元素,返回true保存print(list(map(func, [0,1, 2, 3, 4])))根据前面的函数处理逻辑,依次处理后面可迭代对象里面的每个元素,保存前面函数返回的所有结果 </span>

四、常用模块

1、用哪个模块就要import哪个模块

eg:import model#import的本质就是把这个python从头到尾执行一遍

model.run1()model.run2()model.run()

from model import run,run1#只导入某个函数的时候run()run1()

from model import *from model2 import *#这种你不要用,从一个模块里面导入所有的函数run()run1()run2()from model import nameimport sys
这个是在其他目录下的话sys.path.append(r‘E:\byz_code‘)from day4.set1 import hhhhhh()

2、包和文件夹的区别就是包下面有个__init__.py,在python2里面,如果你要导入其他文件夹下面的python文件,那么必须是一个包,python3不需要,只是文件夹就行了
3、环境变量就是用来让你在任意一个目录都可以使用这个命令
4、导入模块的时候,python首先在当前目录下去找这个模块,如果在当前
5、目录下没有找到这个文件的话,那么就去环境变量里面的目录找

eg:

import sysprint(sys.path)#看系统环境变量import modelmodel.run()

六、import random

# print(random.random())  # 随机浮点数,默认取0-1,不能指定范围# print(random.randint(1, 20))  # 随机整数# print(random.randrange(1, 20))  # 随机产生一个range# print(random.choice([1,2,3,4,5]))  # 随机取一个元素# print(random.sample([1,2,3,4,‘6‘], 3))  # 从序列中随机取几个元素,返回的是一个list# print(random.uniform(1, 88888))  # 随机取浮点数,可以指定范围x = [1, 2, 3, 4, 5, 6]random.shuffle(x)  # 洗牌,打乱顺序,会改变原list的值

七、import string

# print(string.ascii_letters + string.digits)  # 所有的数字和字母# print(random.randint(1, 20))  # 随机整数#print(random.choice([1,2,3,4,5]))  # 随机取一个元素#print(random.sample(‘hello‘, 3))  # 从序列中随机取几个元素,返回的是一个list#print(random.uniform(1, 88888))  # 随机取浮点数,可以指定范围# x = [1, 2, 3, 4, 5, 6]# random.shuffle(x)  # 洗牌,打乱顺序,会改变原list的值# print(x)

八、import json

1.json和python的字典类型,但是json里面只能是双引号,不能是单引号2.json串实际上就是一个字符串json_str = """{    "username": "niuhanyang",    "passwd": 123456,    "flag": true}"""# fr = open(‘users‘)# json_dic = json.loads(json_str)3.json串(字符串)转成字典,loads方法是把json转成字典# json_dic_file = json.load(fr)4.json串(字符串)转成字典,load方法是传入一个文件对象,然后load方法自动去读这个文件的内容,然后转成字典# print(json_dic_file)# print(type(json_dic_file))

d = {    "hhh": {        "price": "90000",        "password": "123456"    },    "admin": {        "password": "123456",        "money": 8000    }}

# fw = open(‘users.json‘,‘w‘)# dic_str = json.dumps(d)#把字典变成json串(字符串)# json.dump(d,fw)# print(dic_str)# print(type(dic_str))5.json可以用字典和list6.dump和dumps字典转json串的7.load和loads是json串转字典8.带s就和字符串沾边,不带s和文件对象沾边
时间: 2024-10-15 12:17:24

五、python函数、装饰器、内置函数、json及模块的相关文章

python登录加随机验证码校验程序(装饰器内置函数的理解)

使用说明:为了防止恶意攻击,同时不对原先用户登录验证的方法代码进行改动,在检验账号密码方法外再套一层校验方法(验证码),过滤非人为的攻击. 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*- import os import json import random ###取得绝对路径下的账号密码文件 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) filepa

装饰器 内置函数

1.装饰器 它在不改变原有的函数的代码和调用方式,给他添加新功能. 1.函数即变量 2.def func(func1): func1() 3.函数里面也可以嵌套函数 装饰器本身就是一个函数 高阶函数+函数嵌套 = 装饰器 2.内置函数 i = int('345')#转换int类型 fl = float('2.1')#转换float类型 dic =dict(k=1,v=2)#转换成字典 lis = list('1,2,3')#转换成list new_set = set(lis) def say()

python装饰器内获取函数有用信息方法

装饰器内获取函数有用信息方法 .__doc__用于得到函数注释信息 .__name_用于得到函数名 在函数引用装饰器的时候,函数名会变为装饰器内部执行该函数的名字,所有在直接执行函数名加.__doc__或__name_的时候得到的是,装饰器内部函数的注释信息和名字.因为函数名被替换了. 所以想得到实际的内容,需要引用一个模块,from functools import wraps,并在装饰器函数内部再加一个@wraps的形式改变,得到实际想得到的信息. 作用是在函数加上装饰器后让能够得到真正原来

python中68个内置函数的总结

内置函数 内置函数就是python给你提供的, 拿来直接用的函数, 比如print., input等. 截止到python版本3.6.2 python一共提供了68个内置函数. #68个内置函数 # abs() dict() help() min() setattr() # all() dir() hex() next() slice() # any() divmod() id() object() sorted() # ascii() enumerate() input() oct() sta

python学习笔记11-python内置函数

python学习笔记11-python内置函数 一.查看python的函数介绍: https://docs.python.org/2/library/ 二.python内置函数 1.abs获取绝对值: 通过python官网查看abs abs(x) Return the absolute value of a number. The argument may be a plain or long integer or a floating point number. If the argument

Python标准库:内置函数open(file, mode=&#39;r&#39;, buffering=-1, encoding=None, errors=None, newline=None, closefd=T

本函数是打开一个文件并返回文件对象.如果文件不能打开,抛出异常OSError. 参数file是一个字符串表示的文件名称,或者一个数组表示的文件名称.文件名称可以是相对当前目录的路径,也可以是绝对路径表示. 参数mode是指明打开文件的模式.默认值是'r',表示使用文本的方式打开文件来读取. 'r'表示打开文件只读,不能写. 'w'表示打开文件只写,并且清空文件. 'x'表示独占打开文件,如果文件已经存打开就会失败. 'a'表示打开文件写,不清空文件,在文件后尾追加的方式写入. 'b'表示二进制的

Python标准库:内置函数str(object=&#39;&#39;) str(object=b&#39;&#39;, encoding=&#39;utf-8&#39;, errors=&#39;strict&#39;)

本函数是实现返回字符串对象.参数object是要转换内容的对象:参数encoding是编码方式:errors是错误处理方式. 例子: #str() print(str(b'abc')) print(str(200)) print(str(b'\xe5\x93\x88\xe5\x93\x88', encoding = 'utf-8', errors = 'ignore')) print(str('蔡屋围'.encode('utf-8'), encoding = 'utf-8', errors =

Python标准库:内置函数print(*objects, sep=&#39; &#39;, end=&#39;\n&#39;, file=sys.stdout, flush=False)

本函数是实现对象以字符串表示的方式格式化输出到流文件对象file里.其中所有非关键字参数都按str()方式进行转换为字符串输出,关键字参数sep是实现分隔符,比如多个参数输出时想要输出中间的分隔字符:关键字参数end是输出结束时的字符,默认是换行符\n:关键字参数file是定义流输出的文件,可以是标准的系统输出sys.stdout,也可以重定义为别的文件:参数flush是立即把内容输出到流文件,不作缓存. 例子: #print() print(1, 2, 3, sep = ',', end =

Python:常用的内置函数

内置方法  说明  __init__(self,...)  初始化对象,在创建新对象时调用  __del__(self)  释放对象,在对象被删除之前调用  __new__(cls,*args,**kwd)  实例的生成操作  __str__(self)  在使用print语句时被调用  __getitem__(self,key)  获取序列的索引key对应的值,等价于seq[key]  __len__(self)  在调用内联函数len()时被调用  __cmp__(stc,dst)  比较两

python自定义函数、常用内置函数

1.python自定义函数 Python中用户自己编写的用于实现特定功能的函数代码块,就是自定义函数. 如: def是关键字,saa是自定义函数名,括号用于传参,可以不写参数,冒号后面是函数代码块,这里只写了一条print语句 注意:函数不调用不执行,只有调用函数才会执行 小练习1: 执行结果是: : 再来看一个小练2: 这是一个用来生成双色球的小程序,如蓝色球号码 01 红色球 22 12 23 14 05 26,蓝色球数字范围1-16,红色球数字范围1-33,最后一行调用produce()自