python--函数(二)、装饰器、

1.函数即变量

  函数即变量,hello为变量,输出的是一个内存地址,它把函数体存储在内存里;hello()是一个函数,函数名+小括号就是调用函数。

1  def hello():
2      print('nihao')
3  print(hello)
4  hello()

2. 高阶函数

  一个函数的入参是一个函数时,这个函数就是高阶函数。

1 def s_int(n):
2     return int(n)
3 def add(x,y,z):
4     print(z(x)+z(y))        #z是一个函数,把x、y的值传给z,然后z函数处理后把两个值相加
5 add('2','3',s_int)

3. 嵌套函数

  嵌套函数就是在函数内部再定义一个函数,注意是定义一个函数,而非是再调用一个函数。

1 def test1():
2     def test2():
3         print('test2')
4     print('test1')
5     test2()
6 test1()

4、装饰器

  装饰器实际就是装饰函数,它的作用是给别的函数增加新功能,却不改变原来函数的调用方式;

  下面是一个统计函数调用时间的函数,它通过装饰器在不改变原有函数调用方式的前提下,统计了运行时间。

 1 import time
 2 def test1(func):
 3     def deco():             #此函数进行运行时间计算
 4         start_time = time.time()
 5         func()
 6         stop_time = time.time()
 7         print('the func run time is %s' % (stop_time - start_time))
 8     return deco             #函数运行后返回deco变量
 9 @test1                      #调用装饰器,用在需要统计时间的函数前面
10 def bar():
11     time.sleep(2)
12     print('in the bar')
13 bar()                       #调用该函数时,执行了装饰函数,统计了运行时间

 5. 递归函数

  一个函数子集调用自己就是递归函数,一个函数最多可调用自己999次,故其要有一个明确的结束条件,另递归函数的效率

  不高,尽量少用。

1 def test():
2     num = int(input('please enter a num:'))
3     if num%2 == 0:
4         return True
5     else:
6         print('非偶数,请重新输入')
7         test()          #可以起到循环的作用
8 test()

6. 内置函数

  python默认定义好的函数

 1 #强制类型转换
 2 bool('s')   #bool类型
 3 int()       #整形
 4 float()     #小数
 5 str()       #字符串
 6 dict()      #字典
 7 list()      #列表
 8 set()       #集合
 9 tuple()     #元组
10 
11 print(dir(1))              #打印传入对象的可调用方法
12 print(eval('[]'))         #执行python代码,只能执行简单的,定义数据类型和运算
13 print(exec('def a():pass'))   #执行python代码
14 
15 filter(func,[1,2,3,4])      #根据前面的函数处理逻辑,依次处理可迭代回想里的每一个元素
16                             #返回true,则返回
17 print(list(filter(func,[1,2,3,4])))     #调用方式
18 map(func,[1,2,3,4])         #根据前面的函数处理逻辑,依次处理后面可迭代对象里面的每个元
19                             # 素,保存前面函数返回的所有结果
20 print(locals())             #返回局部变量
21 print(globals())            #返回所有全局变量,返回一个字典
22 print(max(111,12))          #取最大值
23 print(round(11.11,2))       #取几位小数
24 print(sorted([2,31,34,6,1,23,4]))   #排序
25 print(sorted(dic.items()))    #按照字典的key排序
26 print(sorted(dic.items(),key=lambda x:x[1]))    #按照字典的value排序

7、模块

  模块其实就是一个python文件,导入模块的本质是把Python文件从头到尾执行一遍

#模块导入方式
import os #方法一,导入整个模块
os.path.exists('xxx') #调用os下的函数

from os import path #方法二,直接调用os下的某个函数

from day5.model import hello #导入day5文件夹下的model文件中的hello方法
hello()

   random模块

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

  json模块

  json和python的字典类型,但是json里面只能是双引号,不能是单引号,可以通过在线格式验证来判断格式。

1 import json
2 
3 print(json.dumps(dic))      # 把字典转成json串
4 print(json.loads(s_json))   # 把json串转换成字典
5 
6 print(json.dump(dic, f))  # 把字典转换成的json串写到一个文件里面
7 print(json.load(f))  # 从文件中读取json数据,然后转成字典

 

posted @ 2017-06-17 16:44  试尝百味  阅读(149)  评论(0编辑  收藏  举报