经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Ruby » 查看文章
Python之路【第四篇】:Python基础之函数
来源:cnblogs  作者:Simon92  时间:2019/4/15 9:05:44  对本文有异议

函数的理解

面向过程:根据业务逻辑从上到下垒代码

函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可

函数作用是你的程序有良好的扩展性、复用性。

同样的功能要是用3次以上的话就建议使用函数。

特殊理解:

函数可以理解为一个一个的功能块,你把一个大的功能拆分成一块一块的,用某项功能的时候就去调用某个功能块即可!

函数可以理解为:乐高积木,给你一块一块的,你可以用这些积木块组成你想要的任何功能!

函数可以调用函数!主函数的作用就是把函数进行串联、调用!函数本身是不能自己执行的如果不调用就永不执行!

  1. #---------------------------------------------------
  2. def func1():
  3. pass
  4. def func2():
  5. pass
  6. def func3():
  7. pass
  8. def func4():
  9. pass
  10. func1()
  11. func2()
  12. func3()
  13. func4()
  14. if __name__ == '__main__':
  15. #调用上面的函数,判断了、循环了调用等!
  16. #函数里也可以调用函数例子:def func4():
  17. #__name__ 这个是用来判断,如果你是把这个程序当模块导入的话它的__name__就等于这个程序的文件名,如果是手动执行这个脚本比如:python test.py 那么__name__就等于__main__ 所以,我们可以用他来做判断,如果你是手动执行我就调用函数执行if下面的语句,如果你是调用模块下面的if判断后面的语句就不执行!仅当模块使用!
  18. #如果函数当模块导入的时候,他导入的是函数的名称,内容没有被导入,当你去调用的时候他才会导入函数里的信息。

自定义函数

一、背景

在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发工程中比较常见的操作就是粘贴复制,也就是将之前实现的代码块复制到现需功能处,如下:

  1. while True:
  2. if cpu利用率 > 90 %:
  3. # 发送邮件提醒
  4. 连接邮箱服务器
  5. 发送邮件
  6. 关闭连接
  7. if 硬盘使用空间 > 90%:
  8. # 发送邮件提醒
  9. 连接邮箱服务器
  10. 发送邮件
  11. 关闭连接
  12. if 内存占用 >80%:
  13. # 发送邮件提醒
  14. 连接邮箱服务器
  15. 发送邮件
  16. 关闭连接

 上面的代码就是面向过程的编程,但是如果报警多了的话成百的代码需要如何操作呢?复制粘贴就会显得自己low,该如何编写呢,请看下面的代码:

  1. def 发送邮件(内容)
  2. #发送邮件提醒
  3. 连接邮箱服务器
  4. 发送邮件
  5. 关闭连接
  6. while True:
  7. if cpu利用率 > 90%:
  8. 发送邮件('CPU报警')
  9. if 硬盘使用空间 > 90%:
  10. 发送邮件('硬盘报警')
  11. if 内存占用 > 80%:
  12. 发送邮件('内存报警')

 

第二个必然比第一个的重用性和可读性要好,其实就是函数式编程和面向过程编程的区别:

● 面向过程:更具需求一行一行垒加代码!逻辑乱、并切代码重复、不易修改重用性差!

● 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可

● 面向对象:对函数进行分类和封装,让开发"更快更好更强"

二、函数式编程

函数式编程最重要的是增强代码的重用性和可读性:

  1. # 语法
  2.  
  3. def 函数(参数1,参数2,参数3,....):
  4. ' ' '注释' ' '
  5. 函数体
  6. return 返回的值
  7. #函数名的定义要能反映其意义 

函数的定义主要有如下要点:

● def 表示函数的关键字

● 函数名:函数的名称,日后根据函数名调用函数

● 参数:为函数体提供数据

● 函数体:函数中进行一系列的逻辑计算,如,发送邮件、计算出[11,22,45,56,45,]中的最大数等....

● 返回值:当函数执行完毕后,可以给调用者返回数据。

函数使用的原则:先定义,后调用

 

  1. 函数即"变量""变量"必须先定义后引用,未定义而直接函数,就相当于在引用一个不存在的变量名
  2.  
  3. #测试一
  4. def func():
  5. print('from foo')
  6. bar()
  7. func() #报错
  8.  
  9. #测试二
  10. def abc():
  11. print('from abc')
  12. def func():
  13. print('from func')
  14. abc()
  15. func() #正常
  16.  
  17. #测试三
  18. def func():
  19. print('from func')
  20. abc()
  21.  
  22. def abc():
  23. print('from abc')
  24. func() #不会报错
  25.  
  26. #结论:函数的使用,必须遵循原则:先定义,后调用
  27. #我们在使用函数时,一定要明确的区分定义阶段和调用阶段
  28.  
  29. #定义阶段:
  30. def func():
  31. print('from func')
  32. abc()
  33.  
  34. def abc():
  35. print('from abc')
  36. #调用阶段
  37. func()

 函数在定义阶段都干了哪些事?

  1. #只检测语法,不执行代码
  2. 也就说,语法错误在函数定义阶段就会检测出来,而代码的逻辑错误只有在执行的时候才会知道

 定义函数的三种形式

  1. #1、无参:应用场景仅仅只是执行一些操作,比如与用户交互,打印
  2. #2、有参:需要根据外部传进来的参数,才能执行相应的逻辑,比如统计长度,求最大值最小值
  3. #3、空函数:设计代码结构

1、返回值

函数式一个功能块,该功能到底执行成功与否,需要通过返回值来告知调用者。

  1. def test():
  2. '''
  3. 2*x+1
  4. :param x:整形数字
  5. :return: 返回计算结果
  6. '''
  7. x=3
  8. y=2*x+1
  9. return y
  10. a = test()
  11. print(a)

 

  1. def 发送短信():
  2. 发送短信的代码..:
  3. if 发送成功:
  4. return True
  5. else:
  6. return False
  7. while True:
  8. # 每次执行发送短信函数,都会将返回值自动赋值给result
  9. # 之后,可以根据result来写日志,或重发等操作
  10. result = 发送短信()
  11. if result == False:
  12. 记录日志,短信发送失败....

2、参数

1、形参与实参

  1. #形参即变量名,实参即变量值,函数调用时,将值绑定到变量名上,函数调用结束,解除绑定

 

2、具体应用

 

  1. #1、位置参数:按照从左到右的顺序定义的参数
  2. 位置形参:必选参数
  3. 位置实参:按照位置给形参传值
  4. #2、关键字参数:安装key=value的形式定义的实参
  5. 无需按照位置为形象传值
  6. 注意的问题:
  7. 1、关键字实参必须在位置实参右面
  8. 2、对同一个形参不能重复传值
  9. #3、默认参数:形参在定义时就已经为其赋值
  10. 可以传值也可以不传值,经常需要变得参数定义成位置形参,变成较小的参数定义成默认参数(形参)
  11. 注意的问题:
  12. 1、只在定义时赋值一次
  13. 2、默认参数的定义应该在位置形参右面
  14. 3、默认参数通常应该定义成不可变类型
  15. #4、可变长参数:
  16. 可变长指的是实参值的个数不固定
  17. 而实参有按位置和按关键字两种形式定义,针对这两种形式的可变长,形参对应有两种解决方案来完整地存放它们,分别是*args,**kwargs
  18. # ########### *args ####################
  19. def foo(x,y,*args):
  20. print(x,y)
  21. print(args)
  22. foo(1,2,3,4,5)
  23. 输出结果:
  24. C:\Python35\python3.exe C:/Users/ZR/PycharmProjects/python全栈开发/day15/def函数.py
  25. 1 2
  26. (3, 4, 5)
  27. def foo(x,y,*args):
  28. print(x,y)
  29. print(args)
  30. foo(1,2,*[3,4,5])
  31. 输出结果:
  32. 1 2
  33. (3, 4, 5)
  34. def foo(x,y,z):
  35. print(1,2,3)
  36. foo(*[1,2,3])
  37. 输出结果:
  38. 1 2 3
  39. # ############ **kwargs ###################
  40. def foo(x,y,**kwargs):
  41. print(x,y)
  42. print(kwargs)
  43. foo(1,y=2,a=1,b=2,c=3)
  44. 输出结果:
  45. 1 2
  46. {'c': 3, 'a': 1, 'b': 2}
  47. def foo(x,y,**kwargs):
  48. print(x,y)
  49. print(kwargs)
  50. foo(1,y=2,**{'a':1,'b':2, 'c':3})
  51. 输出结果: #更上面输出结果相同,只不过位置有所变化
  52. 1 2
  53. {'a': 1, 'b': 2, 'c': 3}
  54. def foo(x,y,z):
  55. print(x, y, z)
  56. foo(**{'z':1,'x':2,'y':3})
  57. 输出结果:
  58. 2 3 1
  59. # ##### *args + **kwargs############
  60. def foo(x,y):
  61. print(x,y)
  62. def wrapper(*args,**kwargs):
  63. print('==========>')
  64. foo(*args,**kwargs)
  65. #5、命名关键字参数:*后定义的参数,必须被传值(有默认值的除外),且必须按照关键字实参的形式传递
  66. def foo(x,y,*args,a=1,b,**kwargs):
  67. print(x,y)
  68. print(args)
  69. print(a)
  70. print(b)
  71. print(kwargs)
  72. foo(1,2,3,4,5,b=3,c=4,d=5)
  73. 输出结果:
  74. 1 2
  75. (3, 4, 5)
  76. 1
  77. 3
  78. {'c': 4, 'd': 5}

 

 

 

为什么要用参数?举例说明

如果不定义参数,用函数的话:(每个有相同功能的都写个函数,说好的代码简化呢?)

  1. def cpu报警邮件():
  2. # 发送邮件提醒
  3. 连接邮箱服务器
  4. 发送邮件
  5. 关闭连接
  6. def 硬盘报警邮件():
  7. # 发送邮件提醒
  8. 连接邮箱服务器
  9. 发送邮件
  10. 关闭连接
  11. def 内存报警邮件():
  12. # 发送邮件提醒
  13. 连接邮箱服务器
  14. 发送邮件
  15. 关闭连接
  16. while True
  17. if CPU利用率 > 90%:
  18. cpu报警邮件()
  19. if 硬盘使用空间 > 90%:
  20. 硬盘报警邮件()
  21. if 内存占用 > 80%:
  22. 内存报警邮件()

使用函数:(代码明显少了很多,把重复内用改为参数调用!)

  1. def 发送邮件(内容)
  2. #发送邮件提醒
  3. 连接邮箱服务器
  4. 发送邮件
  5. 关闭连接
  6. while True:
  7. if cpu利用率 > 90%:
  8. 发送邮件('CPU报警')
  9. if 硬盘使用空间 > 90%:
  10. 发送邮件('硬盘报警')
  11. if 内存占用 > 80%:
  12. 发送邮件('内存报警')

 函数的四种不同的参数:

1、普通参数

2、默认参数

3、动态参数

普通参数:

  1. # #### 定义函数 ###############
  2. # name 叫做函数func的形式参数,简称:形参
  3. def func(name):
  4. print(name)
  5. # #### 执行函数 ###############
  6. # 'zhurui' 叫做函数func的实际参数,简称:实参
  7. func('zhurui')

但是普通参数有个问题!你在定义参数的时候定义了几个参数,你在调用的时候必须给他几个参数否则会报错! 

  1. def func(name,age):
  2. print(name,age)
  3. func('william')
  4. 报错提示:
  5. TypeError: func() missing 1 required positional argument: 'age'
  6. 其正确的写法是:
  7. def func(name,age):
  8. print(name,age)
  9. func('william'24)
  10. 输出结果:
  11. william 24

默认参数:

在你没有给他指定参数的时候它就会使用默认参数!

  1. def func(name, age = 24):
  2. print('%s:%s' %(name,age))
  3. # 指定参数:
  4. func('william', 32)
  5. 输出结果:
  6. william:24
  7. # 使用默认参数
  8. func('william')
  9. 输出结果:
  10. william:27

 

三、局部变量与全局变量

在子程序中定义的变量成为局部变量,在程序的一开始定义的变量称为全局变量。

全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。

当全局变量与局部变量同名时:

在定义局部变量的子程序内,局部变量起作用;在其他地方全局变量起作用。

  1. name='simon' #全局变量
  2.  
  3. def change_name():
  4. name='牛逼的人物' #局部变量
  5. print('change_name',name)
  6.  
  7. change_name()
  8. print(name)
  9. 输出结果:
  10. C:\Python35\python3.exe G:/python_s3/day15/全局变量与局部变量.py
  11. change_name 牛逼的人物
  12. simon
  13.  
  14. #输出结果要想让全局变量改变成局部变量需要在作用域中加 global name,相当于指针跟引用
  15. 代码如下:
  16. name='simon' #全局变量
  17.  
  18. def change_name():
  19. global name
  20. name='牛逼的人物' #局部变量
  21. print('change_name',name)
  22.  
  23. change_name()
  24. print(name)
  25.  
  26. 输出结果:
  27. C:\Python35\python3.exe G:/python_s3/day15/全局变量与局部变量.py
  28. change_name 牛逼的人物
  29. 牛逼的人物

  

  1. name = 'simon'
  2. def test1():
  3. #name = '孙悟空'
  4. global name #将全局变量引用过来,已经声明,name就是全局的那个变量
  5. print('我要搞', name)
  6. def test2():
  7. name = '基'
  8. print('我要搞', name)
  9. #如果函数的内部无 global关键字,优先读取局部变量,能读取全局变量,无法对全局变量重新赋值 NAME='fff',但是对于可变类型,可以对内部元素进行操作
  10. #如果函数中有global关键字,变量本质上就是全局的那个变量,可读取可赋值
  11. test1()
  12. test2()

注意:

全局变量变量名大写

局部变量变量名小写

  1. def huangwei():
  2. name = '黄伟'
  3. print(name)
  4. def liuyang():
  5. name = '刘洋'
  6. print(name)
  7. def nulige():
  8. name = '沪指花'
  9. print(name)
  10. print(name)
  11. nulige()
  12. liuyang()
  13. print(name)
  14.  
  15. huangwei()

  1. def weihou():
  2. name = "陈卓"
  3. def weiweihou():
  4. global name
  5. name = "冷静"
  6. weiweihou()
  7. print(name)
  8. print(name)
  9. weihou()
  10. print(name)
  11.  
  12. 输出结果:
  13.  
  14. C:\Python35\python3.exe G:/python_s3/day15/全局变量与局部变量.py
  15. 刚娘
  16. 陈卓
  17. 冷静  

代码运行示例图:

使用nonlocal 指定上一级变量

  1. name = "刚娘"
  2. def weihou():
  3. name = "陈卓"
  4. def weiweihou():
  5. nonlocal name #nonlocal,指定上一级变量
  6. name = "冷静"
  7. weiweihou()
  8. print(name)
  9. print(name)
  10. weihou()
  11. print(name)
  12.  
  13. 运行结果:
  14. C:\Python35\python3.exe G:/python_s3/day15/全局变量与局部变量.py
  15. 刚娘
  16. 冷静
  17. 刚娘

四、递归

在函数内部,可以调用其他函数。如果一个函数在内部调用自身

  1. def calc(n):
  2. print(n)
  3. if int(n/2) == 0:
  4. return n
  5. return calc(int(n/2))
  6. calc(10)
  7.  
  8. 输出结果:
  9. C:\Python35\python3.exe G:/python_s3/day15/全局变量与局部变量.py
  10. 10
  11. 5
  12. 2
  13. 1
  1. __author__ = 'zhurui'
  2. import time
  3.  
  4. person_list=['zhurui','caiyunjie','yuanhao','simon','william','zcz']
  5. def ask_way(person_list):
  6. print('-'*60)
  7. if len(person_list) == 0:
  8. return '没人知道'
  9. person=person_list.pop(0)
  10. if person == 'simon':
  11. return '%s说:我知道,东方财富网就在东方财富大厦A座,下肇嘉浜路地铁站就是' %person
  12. print('hi 美男[%s],敢问路在何方' % person)
  13. print('%s回答道:我不知道,但你慧眼识珠,我去帮你问问%s...' % (person,person_list) )
  14. time.sleep(3)
  15. res = ask_way(person_list)
  16. print('%s问的结果是: %res' %(person,res))
  17. return res
  18.  
  19. res = ask_way(person_list)
  20. print(res)

 运行结果如下:

  1. C:\Python35\python3.exe G:/python_s3/day15/全局变量与局部变量.py
  2. ------------------------------------------------------------
  3. hi 美男[zhurui],敢问路在何方
  4. zhurui回答道:我不知道,但你慧眼识珠,我去帮你问问['caiyunjie', 'yuanhao', 'simon', 'william', 'zcz']...
  5. ------------------------------------------------------------
  6. hi 美男[caiyunjie],敢问路在何方
  7. caiyunjie回答道:我不知道,但你慧眼识珠,我去帮你问问['yuanhao', 'simon', 'william', 'zcz']...
  8. ------------------------------------------------------------
  9. hi 美男[yuanhao],敢问路在何方
  10. yuanhao回答道:我不知道,但你慧眼识珠,我去帮你问问['simon', 'william', 'zcz']...
  11. ------------------------------------------------------------
  12. yuanhao问的结果是: 'simon说:我知道,东方财富网就在东方财富大厦A座,下肇嘉浜路地铁站就是'es
  13. caiyunjie问的结果是: 'simon说:我知道,东方财富网就在东方财富大厦A座,下肇嘉浜路地铁站就是'es
  14. zhurui问的结果是: 'simon说:我知道,东方财富网就在东方财富大厦A座,下肇嘉浜路地铁站就是'es
  15. simon说:我知道,东方财富网就在东方财富大厦A座,下肇嘉浜路地铁站就是
  16.  
  17. Process finished with exit code 0

递归特性:

1.必须有一个明确的结束条件

2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

 

 

 

五、作用域

示例代码如下:

  1. #1、作用域即范围
  2. - 全局范围(内置名称空间与全局名称空间属于该范围):全局存活,全局有效
  3.   - 局部范围(局部名称空间属于该范围):临时存活,局部有效
  4. #2、作用域关系是在函数定义阶段就已经固定的,与函数的调用位置无关,如下
  5. x = 1
  6. def f1():
  7. def f2():
  8. print(x)
  9. return f2
  10. x = 100
  11. def f3(func):
  12. x=2
  13. func()
  14. x = 10000
  15. f3(f1())
  16. 结果:
  17. C:\Python35\python3.exe G:/python_s3/day16/作用域.py
  18. 10000
  19. #3、查看作用域:globals(),locals()
  20. LEGB 代表名字查找顺序: locals -> enclosing function -> globals -> __builtins__
  21. locals 是函数内的名字空间,包括局部变量和形参
  22. enclosing 外部嵌套函数的名字空间(闭包中常见)
  23. globals 全局变量,函数定义所在模块的名字空间
  24. builtins 内置模块的名字空间

 

六、匿名函数

代码如下:

  1. #1、 代码方式一
  2. def calc(x):
  3. return x+1
  4. res = calc(10)
  5. print(res)
  6. 输出结果为:
  7. C:\Python35\python3.exe G:/python_s3/day16/匿名函数.py
  8. 11
  9. #2、用lambda方式表达
  10. print (lambda x:x+1) #代表单纯的输出内存地址
  11. func=lambda x:x+1
  12. print (func(10))
  13. 输出结果为:
  14. <function <lambda> at 0x00000000006EE0D0>
  15. 11
  1. #表达方式1
  2. name = 'simon'
  3. def change_name(x):
  4. return name+'_sb'
  5. res = change_name(name)
  6. print(res)
  7. #lambda方式表达:
  8. name='simon'
  9. func = lambda x:x+'_sb'
  10. print(func(name))
  11. 输出结果:
  12. C:\Python35\python3.exe G:/python_s3/day16/匿名函数.py
  13. simon_sb
  14. simon_sb

 匿名函数补充:

  1. f = lambda x,y,z:(x+1,y+1,z+1)
  2. print(f(1,2,3))
  3. 输出结果为:
  4. C:\Python35\python3.exe G:/python_s3/day16/匿名函数.py
  5. (2, 3, 4)

七、函数式编程

11 高阶函数

满足俩个特性任意一个即为高阶函数

1、函数的传入参数是一个函数名

2、函数的返回值是一个函数名

例一:不可变:不用变量保存状态,不修改变量

  1. #非函数式
  2. a = 1
  3. def incr_test1():
  4. global a
  5. a+=1
  6. return a
  7. incr_test1()
  8. print(a)
  9. 输出结果:
  10. C:\Python35\python3.exe G:/python_s3/day16/匿名函数.py
  11. 2
  12.  
  13. #函数式
  14. n=1
  15. def incr_test2(n):
  16. return n+1
  17. print(incr_test2(2))
  18. print (n)
  19.  
  20. 输出结果:
  21. C:\Python35\python3.exe G:/python_s3/day16/匿名函数.py
  22. 3
  23. 1
map函数
filter函数
reduce函数

 简单小结:

小结

八、内置函数

  1. #空,None,0的布尔值为False,其余都为True
  2. print(bool(''))
  3. print(bool(None))
  4. print(bool(0))
  5. C:\Python35\python3.exe G:/python_s3/day16/内置函数.py
  6. False
  7. False
  8. False
  9. #bytes()函数,转换成二进制
  10. name='你好'
  11. print(bytes(name,encoding='utf-8'))
  12. print(bytes(name,encoding='utf-8').decode('utf-8')) #decode是将前面处理的编码再解码,还原成原来
  13. print(bytes(name,encoding='gbk'))
  14. print(bytes(name,encoding='gbk').decode('gbk'))
  15. print(bytes(name,encoding='ascii')) #ascii不能编码中文
  16. C:\Python35\python3.exe G:/python_s3/day16/内置函数.py
  17. b'\xe4\xbd\xa0\xe5\xa5\xbd'
  18. 你好
  19. b'\xc4\xe3\xba\xc3'
  20. 你好

 

View Code

 max函数小结:

  1. 1max函数处理的是可迭代对象,相当于一个for循环取出每个元素进行比较,注意,不同类型之间不能进行比较
  2. 2、每个元素间进行比较,是从每个元素的第一个位置依次比较,如果这一个位置分出大小,后面的都不需要比较了,直接得出这俩元素的大小

 

  1. #空,None,0的布尔值为False,其余都为True
  2. # print(bool(''))
  3. # print(bool(None))
  4. # print(bool(0))
  5.  
  6. # #bytes()函数,转换成二进制
  7. # name='你好'
  8. # print(bytes(name,encoding='utf-8'))
  9. # print(bytes(name,encoding='utf-8').decode('utf-8')) #decode是将前面处理的编码再解码,还原成原来
  10. # print(bytes(name,encoding='gbk'))
  11. # print(bytes(name,encoding='gbk').decode('gbk'))
  12. #
  13. # print(bytes(name,encoding='ascii')) #ascii不能编码中文
  14.  
  15. #chr()函数
  16. # print(chr(97))
  17. # print(dir(dict))
  18. # print(divmod(10,36))
  19. # dic ={'name':'alex'}
  20. # print(dic)
  21. # #可hash的数据类型即不可变类型,不可hash的类型即可变数据类型
  22. # name='simon'
  23. # print(hash(name))
  24.  
  25. # print(help(all))
  26. #
  27. # print(bin(10)) #10进制->2进制
  28. # print(hex(12))
  29. # print(oct(12)) #10进制转8进制
  30. #
  31. # print(isinstance(1,int))
  32.  
  33. # l=[1,3,100,-1,-2,4]
  34. # print(max(l))
  35. # print(min(l))
  36.  
  37. #zip()函数,相当于拉链的作用
  38. # print(list(zip(('a','b','c'),(1,2,3))))
  39. # print(list(zip(('a','b','c'),(1,2,3))))
  40. # print(list(zip(('a','b','c','d'),(1,2,3))))
  41. #
  42. # p={'name':'alex','age':18,'gender':'none'}
  43. # print(list(zip(p.keys(),p.values()))) #不加list,只会输出内存地址
  44. # # print(list(p.keys()))
  45. # # print(list(p.values()))
  46. #
  47. # print(list(zip('hello','12345'))) #zip方法里传两个参数,都是序列类型(列表,元祖,字符串)
  48.  
  49. # l=[1,3,100,-1,-2,4]
  50. # print(max(l))
  51. # print(min(l))
  52. people=[
  53. {'name':'alex','age':1000},
  54. {'name':'wupeiqi','age':10000},
  55. {'name':'yuanhao','age':9000},
  56. {'name':'simon','age':18},
  57. ]
  58. print('-------->',max(people,key=lambda dic:dic['age']))
  59. # age_dic={'age1':18,'age4':20,'age3':100,'age2':30}
  60. # print(max(age_dic.values()))
  61. # print((max(age_dic.keys()),max(age_dic.values())))
  62. age_dic={'alex_age':18,'wupeiqi_age':20,'zsc_age':100,'lhf_age':30}
  63. # print(max(age_dic.values()))
  64. #默认比较的是字典的key
  65. # print(max(age_dic))
  66. # for item in zip(age_dic.values(),age_dic.keys()): #(18.'alex_age') (20,'wupeiqi_age')
  67. # print(item)
  68. # print(list(max(zip(age_dic.values(),age_dic.keys()))))
  69. #
  70. # l = [
  71. # (5,'e'),
  72. # (1,'b'),
  73. # (3,'a'),
  74. # (4,'d'),
  75. # ]
  76. # print(list(max(l)))
  77. # # l1=['a10','b12','c10',100] #不同类型之间不能进行比较
  78. # l1=['a10','b12','c10'] #不同类型之间不能进行比较
  79. # print(list(max(l)))
  80. # print(max(l1))
  81. #总结
  82. #1、max的比较,传入的类型为可迭代类型
  83. #2、max的比较,从第一个位置开始比较,如果已经比较出大小,不会再比较后面的位置,直接输出结果
  84. # print(chr(97))
  85. # print(ord('a'))
  86. #pow()函数:
  87. print(pow(2,3)) #2**3
  88. print(pow(3,3,2)) #3**3/2
  89. #reversed()函数,使结果反转
  90. # l=[1,2,3,4]
  91. # print(list(reversed(l)))
  92. #
  93. # #round()函数:四舍不入函数
  94. # print(round(3.5))
  95. #
  96. # #set()函数:
  97. # print(set('hello'))
  98. #selict()函数:切片
  99. # l='hello'
  100. # # print(l[3:5])
  101. # s1=slice(3,5)
  102. # s2=slice(1,4,2)
  103. # print(l[s1])
  104. # print(l[s2])
  105. # print(s2.start)
  106. # print(s2.stop)
  107. # print(s2.step)
  108. #sorted()函数:
  109. # l=[3,2,1,5,7]
  110. # l1=[3,2,'a',1,5,7]
  111. # print(sorted(l))
  112. # print(sorted(l1)) #程序本质就是在比较大小,不同类型之间不可以比较大小
  113. people=[
  114. {'name':'alex','age':1000},
  115. {'name':'wupeiqi','age':10000},
  116. {'name':'yuanhao','age':9000},
  117. {'name':'simon','age':18},
  118. ]
  119. print(sorted(people,key=lambda dic:dic['age']))
  120. name_dic={
  121. 'abyuanhao':900,
  122. 'alex':200,
  123. 'wupei':300,
  124. }
  125. print(sorted(name_dic))
  126. print(sorted(name_dic,key=lambda key:name_dic[key]))
  127. print(sorted(zip(name_dic.values(),name_dic.keys())))
  128. #str()函数
  129. print(str('l'))
  130. print(str({'a':1}))
  131. #sum()函数
  132. l=[1,2,3,4]
  133. print(sum(l))
  134. print(sum(range(5)))
  135. p=range(10)
  136. print(sum(p))
  137. #type()函数
  138. l=[1,2,3,4]
  139. print('>>>>>>>',type(l))
  140. msg='123'
  141. if type(msg) is str:
  142. msg=int(msg)
  143. msg+=1
  144. print(msg)
  145. #var()函数
  146. def test():
  147. msg='人么容量为进入高温热将来惹我居然我给我'
  148. # print(locals())
  149. print(vars())
  150. test()
  151. #import ----->sys-------->__import__()
  152. #__import__()函数: #可以导入字符串
  153. # import 'test' #不能导入字符串

 

原文链接:http://www.cnblogs.com/hackerer/p/10706281.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号