首页 > 编程语言 > 详细

python学习笔记05:函数

时间:2020-05-10 19:01:51      阅读:46      评论:0      收藏:0      [点我收藏+]

函数:提高代码的复用性

函数即变量

1.函数的定义

定义函数使用def关键字,后面是函数名,函数名不能重复

1 def hello():  #hello是函数名
2     print(hello)  #函数体
3 # 函数不调用不会被执行
4 hello()  #调用函数

2.函数的参数

函数在调用的时候,可以传入参数,有形参和实参。

 1 # 写文件
 2 def write_file(file_name,content):  #file_name和content是形参
 3     with open(file_name, w, encoding=utf_8) as f:
 4         f.write(content)
 5 write_file(函数.txt,学习函数)  #‘函数.txt‘和‘学习函数‘是实参

3.函数的返回值

 return作用:1.返回数据(函数没有写返回值的时候,默认返回为None)

                     2.函数里面只要遇到return,函数立马执行结束

 1 # 返回数据
 2 def read_file(file_name):
 3     with open(file_name, r, encoding=utf-8) as f:
 4         content = f.read()
 5         return content  #函数返回值,读完的结果返回
 6 result = read_file(函数.txt)  #保存返回值
 7 print(result结果:, result)
 8 
 9 # 函数里面只要遇到return,函数立马执行结束
10 def t():
11     for i in range(5):
12         print(i)
13         return
14 t()
15 
16 # 返回多个值
17 def func():
18     a = 1
19     b = 2
20     c = 3
21     return a, b, c
22 result = func()  #可以拿一个变量接收,返回的结果是元祖形式
23 print(result)
24 
25 q, w, e = func()  #有几个变量可以拿几个变量来接收(解包)
26 print(q, w, e)
27 
28 
29 # 解包:list有多个元素可以解开
30 info = [xiaohei, beijing, 139]
31 name, addr, phone = info
32 print(name, addr, phone)

4.函数小练习

 1 # 判断s是否是合法小数,如s = ‘14.1‘,返回True或False
 2 # 分析:
 3 # 1)传参
 4 # 2)把入参转成字符串
 5 # 3)判断小数点个数是否为1
 6 # 4)判断小数点前面是否为整数
 7 # 5)判断小数点后面是否为整数
 8 
 9 def is_float(s):
10     s = str(s)
11     if s.count(.) == 1:  #判断小数点是否存在
12         left, right = s.split(.)  #分割小数点的左右
13         if right.isdigit() and left.isdigit():  #判断是否是正小数(左右两边是否是整数)
14             if int(right) != 0 or int(left) != 0:  #判断左右两边不能同时为0(因0.0不是小数)
15                 return True
16 
17         if left.startswith(-) and left.count(-) == 1:  #判断是否是负小数
18             num = left[1:]
19             if num.isdigit() and right.isdigit():
20                 if int(right) != 0 or int(left) != 0:
21                     return True
22     return False
23 print(is_float(-1.3))

 5.函数的形参

 1 # 无参数
 2 def a():
 3     pass
 4 
 5 # 必填参数
 6 def b(name,age):  #又叫位置参数
 7     pass
 8 b(xiaohei,19)
 9 
10 # 默认值参数
11 def op_file(file, content=None):  #默认值参数
12     with open(file, a+, encoding=utf-8) as f:
13         if content:  #传值,说明要写
14             f.write(str(content))
15         else:  #没传值,说明要读
16             f.seek(0)
17             result = f.read()
18             return result
19 
20 # 可变参数
21 # 1.这个参数非必传
22 # 2.不限制参数的个数
23 # 3.args是元祖
24 def send_sms(*args):  #可变参数
25     print(args)
26     print(type(args))
27 send_sms(151,150,138,131)
28 
29 # 关键字参数
30 # 1.这个参数非必传
31 # 2.不限制参数的个数
32 # 3.kwargs是字典
33 def t(**kwargs):  #关键字参数
34     print(kwargs)
35     print(type(kwargs))
36 t(age = 5, name = beijing)  #关键字参数,传入的必须指定关键字
37 
38 # 如果四种参数一起用的话,顺序必须是: 必填参数、默认值参数, 可变参数、关键值参数
39 def test(name,content=None,*args,**kwargs):
40     print(name)
41     print(content)
42     print(args)
43     print(kwargs)
44 
45 
46 def test(name, phone, age, addr, sex):
47     print(name)
48     print(phone)
49     print(age)
50     print(addr)
51     print(sex)
52 test(小明,1111,18,北京,)  #根据定义的参数顺序来传参,容易传错顺序
53 test(age=18, name=小明, phone=1111, addr=北京, sex=)  #指定关键字传参,不需要按照顺序
54 test(小明, 1111, age=18, addr=北京, sex=)  #组合传参
55 # test(‘小明‘, ‘1111‘, age=‘18‘, addr=‘北京‘, ‘男‘)  #错误的,不能这样写

 6.局部变量和全局变量

 1 # 局部变量:定义在函数里面的变量(没有加global修饰),作用域在函数里面,出了函数就失效
 2 # 全局变量:定义在函数外面的变量,一般都是写在代码的最上面,作用域是全部的,大家都可以用
 3 
 4 name = xiaohei  #全局变量
 5 def rename():
 6     global name  #global声明全局变量(在函数里面改全局变量)
 7     name = xiao  #局部变量
 8     print(name1, name)
 9 def test():
10     print(name2, name)  #函数里变量先在函数里找局部变量,取不到值,再去函数外找全局变量
11 print(name3, name)
12 rename()
13 print(name4, name)  #调用函数后,声明的全局变量才生效
14 test()

 局部变量和全局变量小练习

 1 money = 500
 2 def test(consume):  #3.test(500)
 3     return money - consume  #4.500全局变量-500consume=0
 4 def test1(money):  #2.test1(500)
 5     return test(money) +money  #5.test(500)+全局变量500
 6 money = test1(money)  #1.test1(500全局变量)
 7 print(money)  #打印500
 8 
 9 
10 
11 def test():
12     global a
13     a = 5
14 def test1():
15     c = a+5
16     return c
17 test()  #定义函数,不调用不会执行
18 res = test1()
19 print(res)

7.递归函数

 1 # 递归函数:函数自己调用自己,有最大的递归次数999
 2 def xiake():
 3     print(下课)
 4     xiake()    #调用函数
 5 xiake()  #调用函数
 6 
 7 
 8 # 递归效率没有循环效率高
 9 def enter():
10     choice = input(请输入你的选择(1、登录;2、注册;3、后台管理):)
11     if choice not in [1, 2, 3]:
12         print(输入有误,请重新输入)
13         enter()
14     else:
15         print(登录)
16 enter()

8.内置函数

  1 int()  #转整数
  2 str()  #转字符串
  3 list()  #转列表类型
  4 set()  #转集合类型
  5 dict()  #转字典类型
  6 tuple()  #转元祖类型
  7 bool()  #转bool类型
  8 type()  #查看类型
  9 len()  #取长度
 10 input()  #输出
 11 print()  #打印
 12 
 13 print(all([1, 2, 3, 0]))  #判断可循环的对象里面的值是否都为真,返回True,否则返回False(非空即真,非0即真)
 14 print(any([1, 2, 3, 0]))  #判断可循环的对象里面的值是否有一个为真,返回True,否则返回False(非空即真,非0即真)
 15 print(bin(10))  #十进制转二进制
 16 print(chr(33))  #数字对应的ASCII
 17 print(ord(b))  #字符串对应的ASCII
 18 print(hex(111))  #数字转成16进制
 19 print(oct(111))  #数字转成8进制
 20 
 21 print(max(111, 12))  #取最大值
 22 print(sum([111, 12]))  #求和
 23 print(divmod(10, 3))  #取余数,打印(商,余数)
 24 print(round(11.11111, 2))  #取几位小数
 25 
 26 f = open(a.txt, w)
 27 print(dir(f))  #dir()打印传入对象的可调用方法
 28 
 29 def func():
 30     name = abc
 31     age = 18
 32     print(locals())  #locals()返回函数里局部变量放到字典l里
 33 func()
 34 # 返回结果:{‘name‘: ‘abc‘, ‘age‘: 18}
 35 
 36 name = 124
 37 print(globals())  #返回程序内所有变量,返回的是一个字典
 38 
 39 # zip:把2个list合成一个二维数组
 40 l = [u1, u2, u4]
 41 l2 = [p1, p2, p3, p4]
 42 print(list(zip(l, l2)))
 43 # 返回结果:[(‘u1‘, ‘p1‘), (‘u2‘, ‘p2‘), (‘u4‘, ‘p3‘)]
 44 
 45 # sorted:排序(不影响原来的值)
 46 l = [1, 4, 2, 6, 45, 56, 32]
 47 print(sorted(l))  #升序
 48 print(sorted(l, reverse=True))  #降序
 49 
 50 # sorted二维数组排序
 51 l3 = [[小黑, 45], [小贝, 20], [小白, 35]]
 52 # 方法一:
 53 l4 = sorted(l3, reverse=True, key=lambda x: x[-1])  #key的作用:传函数名
 54 print(l4)
 55 # 方法二:
 56 def use_key(x): 
 57     return x[1]
 58 l5 = sorted(l3, reverse=True,key=use_key)  #根据某个值排序
 59 print(l5)
 60 
 61 # 三维数组排序
 62 l7 = [[小黑, 45, [xx, 13]], [小贝, 20, [xx, 11]], [小白, 35, [xx, 33]]]
 63 l7 = sorted(l7, reverse=True, key=lambda x: x[-1][-1])
 64 print(l7)
 65 
 66 # sorted字典排序
 67 d = {a: 3, c: 1, b: 2}
 68 l5 = sorted(d.items(), reverse=True, key=lambda x:x[0])  #按key排序
 69 l6 = sorted(d.items(), reverse=True, key=lambda x:x[-1])  #按value排序
 70 print(l5)
 71 print(l6)
 72 
 73 # filter:循环对象,过滤参数
 74 # 方法一:
 75 def filter_test(x):
 76     return x > 5
 77 result = filter(filter_test, [12, 3, 2, 1, 35])  #循环list里的值传给函数
 78 print(list(result))  
 79 # 返回结果:[12, 35]
 80 # 方法二:
 81 result2 = filter(lambda x: x > 5, [12, 3, 2, 35])  #循环把list里的值传给函数
 82 print(list(result2))  
 83 # 返回结果:[12, 35]
 84 
 85 # map:循环对象,保存函数的返回值
 86 result4 = map(lambda x: str(x).strip().zfill(3), [2, 3, 4])  
 87 print(list(result4))
 88 # 返回结果:[‘002‘, ‘003‘, ‘004‘]
 89 
 90 # enumerate:循环对象,自动计算下标,生成二维数组
 91 l = [注册, 登录, 购物, 积分查询]
 92 for index, i in enumerate(l, 1):  #不传值是默认下标从0开始
 93     print(%s->%s % (index, i))
 94 print(请输入你的选择:)
 95 # 返回结果:
 96 # 1->注册
 97 # 2->登录
 98 # 3->购物
 99 # 4->积分查询
100 
101 # exec:执行python代码
102 str_code = ‘‘‘
103 l = [12, 3, 2, 35]
104 print([str(i).strip().zfill(3) for i in l ])
105 ‘‘‘
106 exec(str_code)
107 # 返回结果:[‘012‘, ‘003‘, ‘002‘, ‘035‘]
108 
109 # eval:执行python代码,只能执行简单的,定义数据类型和运算
110 result = eval({"code":1,"name":"小黑"})
111 print(result)  #返回结果:{‘code‘: 1, ‘name‘: ‘小黑‘}

9.匿名函数

# 匿名函数:是一个简单的函数,没有名字,只能实现一些简单的功能

# lambda x,y:x+y

# lambdad定义匿名函数(冒号前面是入参,冒号后面是返回值)

 

python学习笔记05:函数

原文:https://www.cnblogs.com/zhangxiaowai/p/12839757.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!