python-函数,,函数1、函数定义##
python-函数,,函数1、函数定义##
函数
1、函数定义
## 定义函数def test(x): # 说明函数功能 x += 1 return x## 调用函数print(test(4))
def test(): passprint(test) ### 输出函数名 内存地址:<function test at 0x00D91108>
2、返回值
—过程:没有返回值(return)的函数
— python 中 没有return,默认返回 None
— 返回值>1 ,返回一个tuple(元祖)
3、函数参数
— 形参 实参
— 一个参数不能传两遍值
— 位置参数一一对应,不多不少
—关键字参数,无需一一对应,不多不少
def test(x,y,z): print(x) print(y) print(z)test(z=1,y=4,x=4)
— 位置参数必须在关键字参数的左边
— 默认参数
def test(x,y=‘gogo‘): print(x,y)test(1) ### y为默认参数 1 gogotest(4,‘not‘) ### 传参覆盖y的默认值, 4 not
— 参数组
*列表
def text(x,*args): print(x,args,args[4])text(3,4,656,76,43,5,4) ## 3 (4, 656, 76, 43, 5, 4) 5text(3,*[‘d‘,2,‘f‘]) ## 3 (‘d‘, 2, ‘f‘)
**字典
def test(x,**kwargs): print(x,kwargs)test(4,y=‘fd‘,z=‘ew‘) ### 4 {‘y‘: ‘fd‘, ‘z‘: ‘ew‘}
def test(x,*args,**kwargs): print(x,args,kwargs)test(4,‘sdad‘,4,5,6,y=‘fd‘,z=‘ew‘) ### 4 (‘sdad‘, 4, 5, 6) {‘y‘: ‘fd‘, ‘z‘: ‘ew‘}
4、全局变量,局部变量
— 全局变量名大写
— 局部变量名小写
name = ‘全局‘def change_name(): name = ‘局部‘ print(‘change_name‘, name)change_name() ### change_name 局部print(name) ### 全局
name = ‘全局‘def change_name(): global name name = ‘局部‘ print(‘change_name‘, name)change_name() ## change_name 局部print(name) ### 局部
name = [‘全局‘,‘变量‘]def change_name(): name.append(‘可操作‘) print(‘change_name‘, name)change_name() ### change_name [‘全局‘, ‘变量‘, ‘可操作‘]print(name) ### [‘全局‘, ‘变量‘, ‘可操作‘]
5、函数嵌套
### 函数可嵌套,函数若不调用,不执行def first(): name = ‘第一层‘ print (name) def second(): name = ‘第二层‘ print(name) second() print(name)first() ### 第一层 ### 第二层
name = ‘全局‘def first(): name = ‘局部‘ def second(): global name name = ‘改变‘ second() print(name)print(name)first()print(name)### 全局### 局部### 改变
6、递归
— 函数内部调用自身
— 有明确结束条件(死循环会报错)
import timedef calc(n): print(n) time.sleep(1) ## 停顿1s calc(n)calc(10)
def cal(n): print(n) if int(n/2) == 0: return n return cal(int(n/2))cal(10) ### 10 5 2 1
7、作用域
def test1(): print(‘test1‘)def test(): print(‘test‘) return test1 ## return可以返回任何值res = test() ### 执行test(),返回函数名 test1print(res) ### 打印函数名(即函数的内存地址)<function test1 at 0x00A31108> print(res()) ### 执行test1() ,并将返回值打印,默认为None
name = ‘全局‘def first(): name = ‘第一层‘ def second(): name = ‘第二层‘ def third(): print(name) return third return secondfirst()()() #### 第二层
8、匿名函数
def calc(x): return x+1print(calc(12))### 可以表示为匿名函数的形式### x是形参 : 操作并return出来lambda x:x+1 ### 类似于函数名,是内存地址### 运行匿名函数func = lambda x:x+1print(func(10)) ### 11
9、高阶函数
(1)函数接收的参数是一个函数名
(2)返回资中包含函数
10、map函数
map(func(函数功能),array(可迭代对象)):处理序列中的每个元素,得到的结果是一个‘列表’,该‘列表’元素的个数及位置与原来相同
num = [1, 2, 3, 4, 5, 6]def map_test(func, array): ret = [] for i in num: res = func(i) ret.append(res) return retprint (map_test(lambda x: x + 1,num)) ###[2, 3, 4, 5, 6, 7]### 用map 函数实现s = map(lambda x:x**2,num)print(list(s)) ### [1, 4, 9, 16, 25, 36]
11、filter 函数(过滤)
filter(func(函数功能),array(可迭代对象)):遍历序列中每一个元素,判断元素是否满足条件得到布尔值,如果是True则保留
member = [‘gogo‘,‘baba‘,‘kaka‘]def filter_test(func,array): ret = [] for p in member: if not func(p): ret.append(p) return retres = filter_test(lambda n:str(n).endswith(‘a‘),member)print(res) ### [‘gogo‘]### 用filter 函数实现print(list(filter(lambda n:not str(n).endswith(‘a‘),member)))
12、reduce函数
filter(func(函数功能),array(可迭代对象),initial(初始值)):处理一个序列,对序列进行合并操作
### 列表元素相乘,设置初始值initnum = [1,2,3,4,5]def reduce_test(func,array,init=None): if init is None: res = array.pop(0) else: res = init for num in array: res = func(res,num) return resprint (reduce_test(lambda x,y:x*y,num,10))### reduce函数from functools import reduceprint(reduce(lambda x,y:x*y,num,10))
13、内置函数
### 内置函数## 1、abs() 取负数print(abs(-3)) ## 3## 2、all() 取所有元素做布尔运算## False: 0 ‘ ‘ None []## 可迭代对象为空,返回Trueprint(all([1,2,‘re‘,0]))## 3、any() 任意为真则为真print(any([1,0,‘‘]))## 4、bin() 十进制转二进制## hex() 十进制转十六进制## oct() 十进制转八进制print(bin(3))## 5、bool() 布尔运算 False:空,None,0print(bool(1))## 6、bytes() 字节name = ‘好‘print(bytes(name,encoding=‘utf-8‘)) ## b‘\xe5\xa5\xbd‘ 3字节一个汉字print(bytes(name,encoding=‘utf-8‘).decode(‘utf-8‘))print(bytes(name,encoding=‘gbk‘)) ## b‘\xba\xc3‘ 2字节一个汉字print(bytes(name,encoding=‘gbk‘).decode(‘gbk‘))#print(bytes(name,encoding=‘ascii‘)) ## ascii码不能编码汉字## 7、divmod() 商,余数print(divmod(10,3)) ## (3, 1)## 8、eval()## 把字符串中的数据结构提取出来## 把字符串中的数学运算进行运算print(eval(‘2+3+4‘))## 9、hash()## 可hash的数据类型,即不可变数据类型## 判断是否被修改name = ‘hh‘print(‘before‘,hash(name)) ## before -1094276877name = ‘kk‘print(‘after‘,hash(name)) ## after 210196591## 10、isinstance()print(isinstance(4,int)) ## 判断类型## 11、globals() 打印全局变量print(globals())## locals() 打印局部变量print(locals())## 12、 zip() 拉链 传序列 一一对应,多余舍去## 序列:列表、元祖、字符串print(list(zip((‘a‘,‘s‘,‘d‘),(1,2,3)))) ##[(‘a‘, 1), (‘s‘, 2), (‘d‘, 3)]dic = {‘name‘:‘Amy‘,‘age‘:19,‘gender‘:‘female‘}print(list(zip(dic.keys(),dic.values())))## [(‘name‘, ‘Amy‘), (‘age‘, 19), (‘gender‘, ‘female‘)]print(list(zip(‘hello‘,‘123‘)))## [(‘h‘, ‘1‘), (‘e‘, ‘2‘), (‘l‘, ‘3‘)]
min() max()
— 处理对象是可迭代类型,相当于循环每一个元素进行比较
— 不同类型元素无法比较
— 每个元素进行比较,是从元素第一个位置开始比较,如果这个位置比较出大小,后面位置可不用比较,直接得出大小
## 13、 max() min() 最大最小值## 不同类型不能进行比较li = [1,2,3,45,6]print(max(li))### 字典中的最值age_dic = {‘age1‘:12,‘age4‘:13,‘age3‘:16}print(max(age_dic)) ### 默认比较key age4print(max(age_dic.values())) ### 比较value 16zip(age_dic.values(),age_dic.keys()) ## key 和 value 调换print(max(zip(age_dic.values(),age_dic.keys()))) ## (16, ‘age3‘)people = [ {‘name‘:‘Amy‘,‘age‘:45}, {‘name‘: ‘Bob‘, ‘age‘: 34}, {‘name‘: ‘Lisa‘, ‘age‘: 23}, {‘name‘: ‘Lucy‘, ‘age‘: 26},]print(max(people,key=lambda dic:dic[‘age‘])) ## {‘name‘: ‘Amy‘, ‘age‘: 45}
## 14、 chr() 打印ASCII码表中位置## ord() 与上面相反## 15、pow()print(pow(3,3)) ## 3**3print(pow(3,3,2)) ## 3**3%2## 16、reversed() 反转print(list(reversed([1,2,3,4]))) ### [4, 3, 2, 1]## 17、round() 四舍五入print(round(8.7)) ## 9## 18、slice() 切片s = ‘hello‘s1 = slice(3,5)print(s[s1]) ## lo
## 19、sorted() 排序li = [3,5,1,4,1,3]print (sorted((li))) ## [1, 1, 3, 3, 4, 5]## 列表排序people = [ {‘name‘:‘Amy‘,‘age‘:45}, {‘name‘: ‘Bob‘, ‘age‘: 34}, {‘name‘: ‘Lisa‘, ‘age‘: 23}, {‘name‘: ‘Lucy‘, ‘age‘: 26},]print(sorted(people,key=lambda dic:dic[‘age‘]))## 字典排序name_dic = { ‘Amy‘:99, ‘Haha‘:78, ‘Kaka‘:90}print(sorted(name_dic)) ### 默认根据key排序print(sorted(name_dic,key=lambda key:name_dic[key])) ### [‘Haha‘, ‘Kaka‘, ‘Amy‘]print(sorted(zip(name_dic.values(),name_dic.keys()))) ## [(78, ‘Haha‘), (90, ‘Kaka‘), (99, ‘Amy‘)]
## 20、sum() 求和print(sum(range(5))) ## 10## 21、 type() 数据类型print(type(‘we‘)) ## <class ‘str‘>## 22、 vars()def test(): ## 打印 {‘msg‘: ‘hello hello hi‘} msg = ‘hello hello hi‘ print(locals()) print(vars())test()## 23、import 不能导入字符串模块名## __import__() 导入字符串模块名
python-函数
评论关闭