Python之路【第五篇】python基础 之函数

函数

一、定义和使用

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

1 def 函数名(参数):
2         
3     ...
4     函数体
5     ...
6     返回值

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

  • def:表示函数的关键字
  • 函数名:函数的名称,日后根据函数名调用函数
  • 函数体:函数中进行一系列的逻辑计算
  • 参数:为函数体提供数据
  • 返回值:当函数执行完毕后,可以给调用者返回数据

1、返回值

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

以上要点中,比较重要有参数和返回值: 1 def 发送短信():

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

2、参数

  • 1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量
  • 2.实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值

函数的有三中不同的参数:

  • 普通参数
  • 默认参数
  • 动态参数
 1 #定义函数
 2 #n 叫做函数 name 的形式参数,简称:形参
 3 
 4 def name(n):
 5     print(n)
 6 
 7 #执行函数 
 8 #'nick' 叫做函数 name 的实际参数,简称:实参
 9 
10 name('nick')
11 
12 普通参数
普通参数
 1 def func(name, age = 18):
 2     print("%s:%s")%(name,age)
 3 
 4 # 指定参数
 5 func('nick', 19)
 6 # 使用默认参数
 7 func('nick')
 8 
 9 注:默认参数需要放在参数列表最后
10 
11 默认参数
默认参数
 1 def func(*args):
 2     print args
 3 
 4 # 执行方式一
 5 func(11,22,33,55,66)
 6 
 7 # 执行方式二
 8 li = [11,22,33,55,66]
 9 func(*li)
10 
11 动态参数(*args)
动态参数*args
 1 def func(**kwargs):
 2     print kwargs
 3 
 4 
 5 # 执行方式一
 6 func(name='nick',age=18)
 7 
 8 # 执行方式二
 9 li = {'name':'nick', age:18, 'job':'pythoner'}
10 func(**li)
11 
12 动态参数(**kwargs)
动态参数**kwargs
1 def hi(a,*args,**kwargs):
2     print(a,type(a))
3     print(args,type(args))
4     print(kwargs,type(kwargs))
5 hi(11,22,33,k1='nick',k2='jenny')
6 也称万能参数
动态参数*args**kwargs

3、全局与局部变量

全局变量在函数里可以随便调用,但要修改就必须用 global 声明

 1 ############### 全 局 与 局 部 变 量 ##############
 2 #全局变量
 3 P = 'nick'
 4  
 5 def name():
 6     global P        #声明修改全局变量
 7     P = 'jenny'     #局部变量
 8     print(P)
 9  
10 def name2():
11     print(P)
12  
13 name()
14 name2()
全 局 与 局 部 变 量

二、内置函数

  1 # 1. 绝对值
  2 # i = abs(-123)
  3 # print(i)
  4 
  5 # 2 all 循环参数,如果每个元素都为真,那么all的返回值为真
  6 # r = all([1,2,3,True,False])
  7 # print(r)
  8 
  9 # 3 any 循环参数,如果元素有一真,那么any的返回值为真
 10 # i = any([None,'',{},[],(),0,1])
 11 # print(i)
 12 
 13 # 4
 14 # bin() # 二进制 0b1011 ob 代表2进制
 15 # print(bin(11))
 16 # oct() # 八进制
 17 # int() # 十进制
 18 # hex() # 十六进制
 19 
 20 # 5
 21 # bool ,判断真假,把一个对象转换成布尔值
 22 
 23 # 6
 24 # str
 25 # list
 26 
 27 # bytes  字节
 28 # bytearray  字节列表
 29 # 字节和字符串之间的转换
 30 # print(bytes("112",encoding="gbk"))
 31 
 32 # 7
 33 # chr(33)  # 查看ASCII 中对应的字符
 34 # ord("t") #  查看字符对应的位置
 35 # # ascii 一个字节,8位,2**8 ,256
 36 
 37 # 8 做编译用,把一段字符串编译成一段可执行的代码
 38 # compile()
 39 
 40 # 9 得到商和余数商3余1
 41 # r = divmod(10,3)
 42 # print(r)
 43 
 44 # 10 可以执行一个字符串形式的表达式
 45 # ret = eval("1 + 3") # 表达式,返回值
 46 # print(ret)
 47 # exec 执行py代码
 48 # evel 表达式,返回值
 49 # compile 编译
 50 
 51 # 11
 52 # filter(函数,可迭代对象) 过滤
 53 # def f(x):
 54 #     if x >22:
 55 #         return True
 56 #     else:
 57 #         return False
 58 # ret = filter(f,[11,22,33,44,55])
 59 # print(list(ret))
 60 # ret = filter(lambda x:x>22,[11,22,33,44,55])
 61 # print(list(ret))
 62 
 63 # 12 map(函数,可迭代对象)
 64 # ret = map(lambda x:x+100,[1,2,3,4,5])
 65 # print(list(ret))
 66 # ret = map(lambda x:x+100 if x%2 == 0 else x ,[1,2,3,4,5])
 67 # print(list(ret))
 68 
 69 # 13
 70 # globals() # 获取所有的全局变量
 71 # locals()
 72 # def f1():
 73 #     name = 123
 74 #     print(locals())
 75 #     print(globals())
 76 # f1()
 77 
 78 # 14  判断某个对象是否是某个类创建的
 79 # li = [11,22,33]
 80 # r = isinstance(li,list)
 81 # print(r)
 82 
 83 # 15 创建一个可被迭代的东西
 84 # obj = iter([11,22,33,44])
 85 # r1 = next(obj)
 86 # # next 调用迭代的对象的值
 87 # print(r1)
 88 
 89 # 16
 90 # max()#取最大值
 91 # min()#取最小值
 92 
 93 # 17 求指数2的10次方
 94 # i = pow(2,10)
 95 # print(i)
 96 
 97 # 18 四舍五入
 98 # r = round(3.6)
 99 # print(r)
100 
101 # 19 求和
102 # sum()
103 
104 # 20  一一对应
105 # zip()
106 # li = [11,22,33,44]
107 # l1 = ['a','b','c','d']
108 # r = zip(li,l1)
109 # print(list(r)) # 结果:[(11, 'a'), (22, 'b'), (33, 'c'), (44, 'd')]
110 
111 # 21 排序,同种类型
112 # li = [1,211,22,3,4]
113 # # print(li )
114 # # li.sort()
115 # # print(li)
116 #
117 # new_li = sorted(li)
118 # print(new_li)
119 
120 内置函数
内置函数

 

一、map

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

 1 str = ['a', 'b']
 2  
 3 def fun2(s):
 4  
 5     return s + "alvin"
 6  
 7 ret = map(fun2, str)
 8  
 9 print(ret)      #  map object的迭代器
10 print(list(ret))#  
基础班
1 li = [11, 22, 33]
2 
3 new_list = map(lambda a: a + 1, li)
自增1
1 li = [11, 22, 33]
2 sl = [1, 2, 3]
3 new_list = map(lambda a, b: a + b, li, sl)
两个列表对应元素相加

 

二、filter

对于序列中的元素进行筛选,最终获取符合条件的序列

1 str = ['a', 'b','c', 'd']
2  
3 def fun1(s):
4     if s != 'a':
5         return s
6  
7  
8 ret = filter(fun1, str)
基础班
1 li = [11,22,33,44,55]
2 
3 new_list = filter(lambda arg: arg > 22, li)
4 
5 print(list(new_list))
求大于22的值

三、reduce

对于序列内所有元素进行累计操作

1 from functools import reduce
2  
3 def add1(x,y):
4     return x + y
5  
6 print (reduce(add1, range(1, 101)))## 
基础班
1 li = [11, 22, 33]
2 
3 result = reduce(lambda arg1, arg2: arg1 + arg2, li)
求和

三、三元运算

三元运算(三目运算),是对简单的条件语句的缩写。

1 result = 值1 if 条件 else 值2
2   
3 # 如果条件成立,那么将 “值1” 赋值给result变量,否则,将“值2”赋值给result变量
4 
5 ########## 三 元 运 算 ############
6 name = "nick" if 1==1 else "jenny"
7 print(name)

 

四、lambda 表达式

对于简单的函数,存在一种简便的表示方式,即:lambda表达式

 1 ######## 普 通 函 数 ########
 2 # 定义函数(普通方式)
 3 def func(arg):
 4     return arg + 1
 5      
 6 # 执行函数
 7 result = func(123)
 8      
 9 ######## lambda 表 达 式 ########
10      
11 # 定义函数(lambda表达式)
12 my_lambda = lambda arg : arg + 1 # 相当于返回值
13      
14 # 执行函数
15 result = my_lambda(123)

 

五、递归

递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
 
递归算法解决问题的特点:
  • 递归就是在过程或函数里调用自身。
  • 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
  • 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
  • 递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。
 1 def fact_iter(product,count,max):
 2     if count > max:
 3         return product
 4     return fact_iter(product * count, count+1, max)
 5  
 6 print(fact_iter(1,1,5))
 7 print(fact_iter(1,2,5))
 8 print(fact_iter(2,3,5))
 9 print(fact_iter(6,4,5))
10 print(fact_iter(24,5,5))
11 print(fact_iter(120,6,5))
View Code

 

posted @ 2017-01-05 08:54  摆渡人1993  阅读(238)  评论(0编辑  收藏  举报