python-07

摘要:
如果要跳过默认参数的分配并直接将值分配给下一个参数,则应指定要将值分配到˃˃defhosts的参数:print“%slisten%s”%…˃˃Hostshttplistenon80˃˃hosts80listenonhttp˃˃Hostshttplistenon80 4。参数数量未知的函数定义˃˃deffunc5:foriinargs:。。。打印…˃˃函数5()˃˃函数5abcd˃˃函数5afcd函数7 5。使用字典接收参数˃˃deffunc6:foriinkwargs:。。。打印“%s:%s”%…˃˃函数6()˃˃函数6页面:10名称:bob 6。同时使用元组和字典。注意:使用时,需要将元组放在前面,字典放在后面˃˃deffunc7:foriina:。。。打印。。。形式,九分子:。。。打印“%s:%s”%(m,n)…˃˃Func7hellotom0:host1:port综合练习#![y] ').lower()ifoptandopt[0]=='n':除:breakif__name__=='__main__':main()VIII。变量范围#/Usr/bin/envpythonx=10deffoo():globalxx=5foo(/usr/bin/envpythona=lambdax,y:x+yprinta(3,4)筛选列表,只留下奇数:#/usr/bin/envpythonlist=[23,322433,55,44]deffunc1:ifnum%2==1:returnTrue:returnFalseblist=filterprintblist替换为lambda:#!
一、函数
引用:例,定义一个foo函数,然后让bar引用foo 
  1. >>> def foo(): print 'hello world!'
  2. ...
  3. >>> bar = foo
  4. >>> bar()
  5. hello world!
  6. >>> foo()
  7. hello world!

二、关键字参数
例:func1需要有一个参数,该参数必须提供,否则出现异常
  1. >>> def func1(x):
  2. ... print '
  3. KeyboardInterrupt
  4. >>> def func1(x): print '*' * x
  5. ...
  6. >>> func1()
  7. Traceback (most recent call last):
  8. File "<stdin>", line 1, in <module>
  9. TypeError: func1() takes exactly 1 argument (0 given)
  10. >>> func1(5)
  11. *****
例2:如何提供了多个值,这些值将依次传递给每个参数。值的数目要求和参数否则仍然有错误。
  1. >>> def func2(x, y): print x * y
  2. ...
  3. >>> func2(3, 4)
  4. 12
  5. >>> func2('#', 4)
  6. ####
三、默认参数
在默认值的参数不能出现在没有默认值的参数之前。
例子中,只提供一个值,该值赋值给name, age使用默认值: 如何提供了两个值,第二个值将会赋值给age
  1. >>> def func3(name, age = 7): print '%s: %d' % (name, age)
  2. ...
  3. >>> func3('tom')
  4. tom: 7
  5. >>> func3('tom', 8)
  6. tom: 8
例2:如何提供了多个默认值,那么在调用函数的时候,值依次传入给每个参数。如果想跳过对某一个默认参数的赋值,直接为下一个参数赋值,那么要写明到底是把值赋值给哪个参数
  1. >>> def hosts(name, port): print '%s listen on %s' % (name, port)
  2. ...
  3. >>> hosts('http', 80)
  4. http listen on 80
  5. >>> hosts(80, 'http')
  6. 80 listen on http
  7. >>> hosts(port = 80, name = 'http')
  8. http listen on 80
四、参数个数未知的函数定义
  1. >>> def func5(*args):
  2. ... for i in args:
  3. ... print i
  4. ...
  5. >>> func5()
  6. >>> func5('abcd')
  7. abcd
  8. >>> func5('abcd', 'efg', 7)
  9. abcd
  10. efg
  11. 7
五、使用字典接收参数
  1. >>> def func6(**kwargs):
  2. ... for i in kwargs:
  3. ... print '%s: %s' % (i, kwargs[i])
  4. ...
  5. >>> func6()
  6. >>> func6(name = 'bob', age = 10)
  7. age: 10
  8. name: bob
六、元组、字典结合使用       注意:在使用的时候,需把元组放在前面,字典放在后面
  1. >>> def func7(*a, **b):
  2. ... for i in a:
  3. ... print i
  4. ... for m, n in enumerate(b):
  5. ... print '%s: %s' % (m, n)
  6. ...
  7. >>> func7('hello', 'tom', host = 'servera', port = 80)
  8. hello
  9. tom
  10. 0: host
  11. 1: port
综合练习
  1. #!/usr/bin/env python
  2. from operator import add, sub
  3. from random import randint, choice
  4. ops = {'+': add, '-': sub}
  5. maxtries = 2
  6. def doprob():
  7. op = choice('+-')
  8. nums = [randint(1,10) for i in range(2)]
  9. nums.sort(reverse = True)
  10. ans = ops[op](*nums)
  11. pr = '%d %s %d = ' % (nums[0], op, nums[1])
  12. oops = 0
  13. while True:
  14. try:
  15. if int(raw_input(pr)) == ans:
  16. print 'correct'
  17. break
  18. if oops == maxtries:
  19. print 'answer %s%d' % (pr, ans)
  20. break
  21. else:
  22. print 'incorrect... try again'
  23. oops += 1
  24. except (KeyboardInterrupt, EOFError, ValueError):
  25. print 'invalid input... try again'
  26. def main():
  27. while True:
  28. doprob()
  29. try:
  30. opt = raw_input('Again? [y]').lower()
  31. if opt and opt[0] == 'n':
  32. break
  33. except (KeyboardInterrupt, EOFError):
  34. break
  35. if __name__ == '__main__':
  36. main()
八、变量的作用域
  1. #!/usr/bin/env python
  2. x = 10
  3. def foo():
  4. print x
  5. foo()

  1. #!/usr/bin/env python
  2. x = 10
  3. def foo():
  4. x = 5
  5. print 'x=', x
  6. foo()
以上程序执行,打印出来的x值是5。如果函数内有一个和全局同名的变量,那么函数内的变量将会覆盖全局变量

九、global语句
  1. #!/usr/bin/env python
  2. x = 10
  3. def foo():
  4. x = 5
  5. print 'x=', x
  6. foo()
  7. print x
最终打印出来x的值仍然是10。如果需要真正的在函数内部将全部变量的值修改。那么执行以下程序:
  1. #!/usr/bin/env python
  2. x = 10
  3. def foo():
  4. global x
  5. x = 5
  6. foo()
  7. print x
程序执行时,打印出来x的值是5
十、lambda匿名函数
  1. #!/usr/bin/env python
  2. def a(x, y):
  3. return x + y
  4. print a(3, 4
可以使用lamdba简化为:
  1. #!/usr/bin/env python
  2. a = lambda x, y: x + y
  3. print a(3, 4)
过滤一个列表,只把奇数留下来: 
  1. #!/usr/bin/env python
  2. alist = [23, 33, 22, 433, 55, 44]
  3. def func1(num):
  4. if num % 2 == 1:
  5. return True
  6. else:
  7. return False
  8. blist = filter(func1, alist)
  9. print blist
使用lambda替换:
  1. #!/usr/bin/env python
  2. alist = [23, 33, 22, 433, 55, 44]
  3. blist = filter(lambda num: num % 2, alist)
  4. print blist

对一个列表实现累加,返回最好终结果:
  1. #!/usr/bin/env python
  2. alist = [1, 44, 2, 55]
  3. def add(x, y):
  4. return x + y
  5. result =reduce(add, alist)
  6. print result
使用lamdba实现:
  1. #!/usr/bin/env python
  2. alist = [1, 44, 2, 55]
  3. result = reduce(lambda x, y : x + y, alist)
  4. print result



来自为知笔记(Wiz)


免责声明:文章转载自《python-07》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux进程管理NetworkManager 介绍下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Android 上的 10 款 Web 开发工具推荐

作为一个狂热的Android用户,我一直在寻找适合Web开发人员使用的一些应用程序。以下推荐10款非常实用的Android端的Web开发工具。EditorJoooid1.1Editor这款工具非常适合用来发布包含HTML、文本、图片和相册的文章,还包含了GPL定位信息。...

更改nexus的工作目录

默认情况下,nexus的工作目录位于${user_home}/sonatype工作目录中。在Linux中,如果用户是root用户,则使用/root/sonatype。这便于通过war将nexus安装到servlet容器中,但不利于服务器的集中管理。这需要更改默认的nexus工作目录位置。为了方便管理,您可以选择使用环境变量。...

说说接口封装

今天,我为同事封装了一个接口。当谈到接口封装时,有很多关于它的讨论。在很多情况下,说一个服务好,一个服务坏,实际上是在吐槽服务团队之外暴露的界面质量。无论哪种语言,抽象的封装接口都由一个函数名、几个参数和几个返回值组成。总之,参数不应该被封装……我们在内部尝试接口_Catch不会抛出异常,所有信息都将以错误代码的形式返回。就php而言,建议进行异常处理。...

axios 处理超时问题 记录

前言:记录最近两天处理请求超时的逻辑。...

docker.service启动失败:Unit not found的原因及解决办法

解决方案是删除/usr/lib/systemd/system/docker.service的[UNIT]中包含的dockersocket,然后重新加载systemctldaemon,最后是systemctlstartdocker.service。启动成功。在类似的情况下,docker.socket缺失,但新版本需要docker.seocket。这是因为Fla...