python之函数

本节主要内容:

      1. 上节遗留的内置函数: 

         callable(), chr(),ord(), compile(), eval(),exec(), divmod(), isinstance() ,filter(), map()

      2. 装饰器

 

  (一)内置函数补充:

    callable():   查看函数是否可被调用,可以调用为True,否则返回False。

 1 print(callable(0))         
 2 print(callable('string'))
 3 def add(a,b):
 4     return a + b
 5 print(add(1,2))
 6 print(callable(add))
 7 
 8 
 9 False
10 False
11 3
12 True

    chr(), ord()  : 字母转换为数字,数字转换为字母。

1 r = chr(65)
2 print(r)
3 
4 n = ord('a')
5 print(n)
6 
7 
8 A
9 97

  

  应用ASCII字符代码随机生成验证码:

       点击一次随机自动生成验证码:

 

 1 import random
 2 li = []
 3 for i in range(6):
 4     r = random.randrange(0,5)
 5     if r == 2 or r == 4:
 6         num = random.randrange(0,10)
 7         li.append(str(num))
 8     else:
 9         temp = random.randrange(65,91)
10         c = chr(temp)
11         li.append(c)
12 result = ''.join(li)
13 print(result)
14 
15 
16 7SC45Q

  complie() : 将字符串转换为Python代码

  eval() : 编译成表达式,执行表达式,并获取结果,有返回值

  exec():  执行python代码,但没有返回值

 1 s = 'print(123)'
 2 r =compile(s,'<string>','exec') #中间字符串必须指定
 3 exec(r)
 4 
 5 print(exec('7+9+8'))    #没有返回值为None
 6 ret = eval('7+9+8')
 7 print(ret)
 8 
 9 
10 123
11 None
12 24

  divmod():  得到商和余数,一般用于分页标识

1 r = divmod(97,10)  #97行,每页10行
2 print(r)
3 print(r[0])
4 print(r[1])
5 
6 (9, 7)   #分9页,余7行
7 9
8 7

  isinstance():  判断对象是否为某个类的实例

1 s = [11,22,33]
2 r = isinstance(s,list)
3 print(r)
4 
5 True

  filter() :  函数,可迭代的对象,给定一个对象的序列或函数,每个序列元素都通过过滤器筛选,保留函数返回值为True的对象。

 1 def f2(a):
 2     if a > 22:
 3         return True
 4 li = [11,22,33,44,55]
 5 ret = filter(f2,li)
 6 print(list(ret))
 7 
 8 #lambda案例:
 9 f1 = lambda a: a > 30      #不成立即为False
10 ret = f1(10)
11 print(ret)
12 
13 li = [11,22,33,44,55]
14 result = filter(lambda a:a>33, li)
15 print(list(result))
16 
17 [33, 44, 55]
18 False
19 [44, 55]

  map():  与filter相似,map()将函数调用映射到每一个序列的元素上,并返回一个包含所有返回值的列表。可实现for 循环

 1 li = [11,22,33,44,55]
 2 def f2(a):
 3    return a + 100        #循环每一个元素并加100
 4 result1 = map(f2,li)
 5 print(list(result1))        #返回列表必须指定list
 6 
 7 result2 = map(lambda a:a - 10, li)#lambda用法
 8 print(list(result2))
 9 
10 
11 [111, 122, 133, 144, 155]
12 [1, 12, 23, 34, 45]

  (二)装饰器:

      可称为在函数调用上的一种修饰,当声明一个函数或者方法时,才会应用额外的调用。

    装饰器的格式:

      @ + 函数名

      def 函数名(参数):

      @开头,装饰器的函数名和参数(可选参数),接着装饰器声明的是被修饰的函数和装饰函数的可选参数

 1 def outer(func):  
 2     def inner():
 3         print('log')
 4         return func()
 5     return inner()
 6 
 7 @outer
 8 def f1():
 9     print("F1")
10 
11 @outer
12 def f2():
13     print("F2")
14 
15 @outer
16 def f100():
17     print("F100")
18 
19 log
20 F1
21 log
22 F2
23 log
24 F100

一个实际例子:

 1 from time import ctime,sleep  #调用模块
 2 
 3 def time_func(func):          #定义时间函数装饰器并定义内容函数tm_func
 4     def tm_func():
 5         print('[%s] called' % (ctime()))   #输出当前时间戳
 6         return (func)
 7     return tm_func()
 8 @time_func              #应用空函数体定义foo()函数并用time_func修饰
 9 def foo():
10     pass
11 foo()
12 sleep(2)                #第一个函数执行后等待2s后执行第二个函数
13 @time_func               #定义第二个函数修饰
14 def foo1():
15     print('调用成功')    #输出结果
16 foo1()
17 
18 
19 [Tue May 31 11:59:37 2016] called
20 [Tue May 31 11:59:39 2016] called
21 调用成功

后续内容下节补充。。。。谢谢

 

posted @ 2016-05-31 12:04  浮光掠影转瞬间  阅读(212)  评论(0编辑  收藏  举报