zoukankan      html  css  js  c++  java
  • 内置函数

    内置函数

    内置函数之一:lambda表达式

    前面知识回顾:

    三目运算:

    #普通条件语句

      1: if 1 == 1:
    
      2:     name ='曹小贱'
    
      3: else:
    
      4:     name = '曹高田'

    #使用三目运算

      1: name1 = '曹小贱' if 1 == 1 else '曹高田'

    同样的简单的函数也可以使用一种简单的方式,即:lambda表达式

    普通函数:

      1: def func(arg):
    
      2:     return arg + 1
    
      3: result = func(100)
    
      4: print result

    lambda函数:

      1: func1 = lambda a: a + 1
    
      2: result1 = func1(200)
    
      3: print result1

    特性:

    1:处理简单逻辑的函数

    2:自动返回数据,默认使用return

    内置函数之二:map函数

    遍历序列,对序列中的每个元素进行操作,最终获取到新的序列。

    范例:

      1: li = [11,22,33,343]
    
      2: def func(a):
    
      3:     return a + 10
    
      4: new_li = map(func,li)
    
      5: print new_li

    范例:二个序列相加

      1: li = [11,22,33,343]
    
      2: li_1 = [1,2,3,4]
    
      3: new_li = map(lambda a,b:a+b,li,li_1)
    
      4: print new_li

    内置函数之三:filter函数

    对序列的中的元素进行筛选但是只取内容为真的值

      1: li = [11,22,33,343,0,""] 
    
      2: print filter(None,li)
    
      3: 结果:[11, 22, 33, 44, 55, 66]
    
      4: print filter(lambda a:a>33,li)
    
      5: 结果:[44, 55, 66]

    注释:

          0:它是None;空字符串也是None

    内置函数之四:reduce

    对序列中的元素进行累计操作

    特性:

    # reduce的第一个参数,函数必须要有两个参数

    # reduce的第二个参数,要循环的序列

    # reduce的第三个参数,初始值

    image

    范例:

      1: li = [11,22,33,343]
    
      2: result = reduce(lambda a,b:a + b,li)
    
      3: print result
    
      4: 结果:409

    范例二:

      1: li = [11,22,33,343]
    
      2: result = reduce(lambda a,b:a + b,li,1000)
    
      3: print result
    
      4: 结果:1409

    注释:

            给定一个初始值,从1000开始加,想当于1000+第一个数字,然后再加第二个数字

    yeild生成器

    当执行yeild的时候吗,首先冻结函数,记住冻结的位置,下次执行的时候,直接从冻结的地方开始继续执行。

    实例一:不带参数

      1: def func():
    
      2:     yield 1
    
      3:     yield 2
    
      4:     yield 3
    
      5: for i in func():
    
      6:     print i
    
      7: 结果:1 2 3

    实例二:带参数

      1: def func(arg):
    
      2:     seed = 0
    
      3:     while True:
    
      4:         seed += 1
    
      5:         if seed > arg:
    
      6:             return 
    
      7:         else:
    
      8:             yield seed
    
      9: for i in func(4):
    
     10:     print i
    
     11: 结果: 1 2 3 4

    装饰器

    装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或类,使用装饰器可以在函数执行前和后添加相应的操作

    注释:

           一定要搞清楚,函数中的返回值是一个函数还是一个对象(函数的内存地址)

    范例一:

      1: def wrapper(arg):
    
      2:     if login("cgt"):
    
      3:         return arg
    
      4: def login(user):
    
      5:     if user == "cgt":
    
      6:         return True
    
      7:     else:
    
      8:         print "invalid username"
    
      9: def home():
    
     10:     print "showing the home page"
    
     11: 
    
     12: home = wrapper(home)
    
     13: home()
    
     14: 结果:showing the home page

    注释:

           1:函数home直接写,什么都不加,是他的内存地址。

           2:使用wrapper函数将home的内存地址传给arg

           3:在wrapper中调用login函数进行用户名的判断

    执行过程:

           1:home = wrapper(home),括号中的home是home函数的内存地址,wrapper函数将home的内存地址当作一个实参传递给形参,传给arg。

           2:调用wrapper函数执行,函数中调用login函数,login函数传入的实参cgt传递给login的形参user。执行login函数,判断是否正确,正确返回True给wrapper函数,不正确输出“invalid username”。

           3:wrapper函数接收到login的True返回值后,继续执行,返回arg(还是home函数的内存地址)

           4:home = wrapper(home)接收到wrapper的返回值,home函数的内存地址,将其赋值给home。

           5:home()。执行home函数。

    范例二:

      1: def wrapper(arg):
    
      2:     if login("cgt"):
    
      3:         return arg
    
      4: def login(user):
    
      5:     if user == "cgt":
    
      6:         return True
    
      7:     else:
    
      8:         print "invalid username"
    
      9: @wrapper
    
     10: def home():
    
     11:     print "showing the home page"
    
     12: home()

    注释:

          @wrapper 等于 home = wrapper(home)

    范例三:

    带参数的装饰器

      1: def wrapper(func):
    
      2:     def wrappre2(*args,**kwargs):
    
      3:         user = args[0]
    
      4:         if user == 'cgt':
    
      5:             return func(*args,**kwargs)
    
      6:         else:
    
      7:             return error(user)
    
      8:     return wrappre2
    
      9: 
    
     10: def error(user):
    
     11:     print "authentication failed"
    
     12: 
    
     13: @wrapper
    
     14: def home(username):
    
     15:     print "showing the home page",username
    
     16: 
    
     17: @wrapper
    
     18: def host_list(username,host):
    
     19:     print "showing the  user list page",username,'',host
    
     20: 
    
     21: home('cgt')
    
     22: host_list('cgt','192.168.1.1')
    
     23: 结果:
    
     24: showing the home page cgt
    
     25: showing the  user list page cgt  192.168.1.1

    注释:

          1:home和host_list函数调用的时候,因为他们的函数前面有装饰器,所以要先通过装饰器函数。

    冒泡算法

    范例:

    两个数值或者字符串的进行交换,使用中间变量进行过度

      1: li = [99,22,44,11,77,23]
    
      2: print len(li)  #6
    
      3: for x in range(1,len(li)):
    
      4:     #循环的x等于1,2,3,4,5
    
      5:     for y in range(len(li)-x):
    
      6:         #循环的y等于5,4,3,2,1
    
      7:         num1 = li[y]
    
      8:         num2 = li[y+1]
    
      9:         if num1 > num2:
    
     10:             tmp = num1
    
     11:             li[y] = num2
    
     12:             li[y+1] = tmp
    
     13: print li

     

    作者:曹小贱
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    zoj 1239 Hanoi Tower Troubles Again!
    zoj 1221 Risk
    uva 10192 Vacation
    uva 10066 The Twin Towers
    uva 531 Compromise
    uva 103 Stacking Boxes
    稳定婚姻模型
    Ants UVA
    Golden Tiger Claw UVA
    关于upper、lower bound 的探讨
  • 原文地址:https://www.cnblogs.com/caoxiaojian/p/4976351.html
Copyright © 2011-2022 走看看