zoukankan      html  css  js  c++  java
  • 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 调用成功

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

  • 相关阅读:
    gridview 列排序问题
    asp.net中session丢失原因分析
    网页flash挡住了TQ的解决办法
    php正确率比较高的安装教程
    PHP5+APACHE2.2配置
    HTML5: HTML5 网站设计作品欣赏
    ASP.NET开源CMS汇总
    ASP.NET:页面传值的几种方式
    Access:数据库操作常见错误
    observer pattern
  • 原文地址:https://www.cnblogs.com/python-nameless/p/5545425.html
Copyright © 2011-2022 走看看