函数与模块

打印 上一主题 下一主题

主题 1034|帖子 1034|积分 3102

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目录
1.函数
1.1.函数概念
1.2.函数定义
1.3.函数分类
1.4.函数参数类型
1.4.1.位置参数
1.4.2.关键字参数
1.4.3.默认值参数
1.4.4.可变参数
1.5.匿名函数
1.6.参数传递问题
2.冒泡排序
2.1.冒泡排序规则
2.2.冒泡排序实现
3.math 模块
4.random 模块
5.datetime 模块
6.re 模块
6.1.正则表达式语法
6.1.1.字符匹配
6.1.2.数量词匹配
6.1.3.特殊字符匹配
6.1.4.边界字符
6.2.python 正则表达式常用函数
7.json 模块

1.函数

1.1.函数概念

在 Python 中,函数(Function)是一段可重用的代码块,用于执行特定的使命或完成特定的功能。函数可以接受输入参数(也称为参数或形参)并返回一个结果。通过函数,可以将程序划分为较小的模块,使代码更加有组织、可读性更好,而且可以提高代码的重用性。
函数的定义通常包括以下几个部分:

  • 函数名:用于标识函数的名称,以便在程序中调用它。(下令规则和变量名一样)
  • 参数:函数可以接受零个或多个参数作为输入。参数是可选的,可以根据需要定义。
  • 函数体:函数体是一组执行特定使命的语句块。它是函数的实际代码逻辑。
  • 返回值:函数可以返回一个值作为结果。利用 return 语句指定函数的返回值。
1.2.函数定义


返回值类型提醒最好写,不写也行。
参数列表无关紧要,根据需求灵活而定。
1.3.函数分类



  • 无参无返回值
  • 无参有返回值
  • 有参无返回值
  • 有参有返回值
当有无法确定的数据就需要传入参数 , 函数结果需要参加其他操纵就需要返回值。
1.4.函数参数类型



  • 位置参数
  • 关键字参数
  • 默认值参数
  • 可变参数(不定长参数)
  • 其他(利用不多)
1.4.1.位置参数

位置参数(Positional Arguments):位置参数是按照参数定义的序次举行传递的参数。调用函数时,需要按照参数定义的序次依次传递参数值。


1.4.2.关键字参数

关键字参数(Keyword Arguments):关键字参数是通过参数名称举行传递的参数,与位置无关。在函数调用时,可以利用参数名称来指定参数值。


print() 函数源码:



1.4.3.默认值参数

默认参数(Default Arguments):默认参数是在函数定义时为参数指定的默认值。如果在函数调用时没有传递相应参数的值,将利用默认值。


1.4.4.可变参数

可变参数(Variable Arguments):可变参数允许函数接受任意数量的参数。在函数定义时,


  • 在参数名前加上 *,表现这是一个可变参数。可变参数将被视为元组(tuple)类型。
  • 在参数名前加上 **,表现这是一个可变参数。可变参数将被视为字典(dict)类型。

input_util.py文件:
  1. # 封装 2 个函数
  2. # 输入任意正确范围的整数
  3. # 参数:提示语句,不定长参数(约束范围)
  4. # 返回值:需要
  5. def input_int(msg: str = '请输入一个整数:', *args: int) -> int:
  6.     while 1:
  7.         n = input(msg)
  8.         if n.isdigit() if n[0] != '-' else n[1: ].isdigit():
  9.             n = int(n)
  10.             if len(args) == 0:
  11.                 return n
  12.             
  13.             elif len(args) == 1:
  14.                 if n >= args[0]:
  15.                     return n
  16.                 else:
  17.                     print(f'请输入大于等于{args[0]}的整数')
  18.             else:
  19.                 if args[0] <= n <= args[1]:
  20.                     return n
  21.                 else:
  22.                     print(f'请输入{args[0]} - {args[1]}的整数')
  23.         else:
  24.             print('输入的不是数字')
  25.     pass
  26. # 判断整数部分&小数部分是不是数字
  27. def fun(n: str) -> bool:
  28.     if n.find('.') == -1 and n.isdigit(): # 没有 .
  29.         return True
  30.     elif n.find('.') == 0: # . 在开头
  31.         if n[1:].isdigit():
  32.             return True
  33.     elif n.find('.') == len(n) - 1: # . 在最后
  34.         if n[: -1].isdigit():
  35.             return True
  36.         
  37. # 传范围
  38. def fun2(n: float, *args: float) -> float:
  39.     if len(args) == 0:
  40.         return n
  41.     elif len(args) == 1:
  42.         if n >= args[0]:
  43.             return n
  44.         else:
  45.             print(f'请输入大于等于{args[0]}的小数')
  46.     else:
  47.         if args[0] <= n <= args[1]:
  48.             return n
  49.         else:
  50.             print(f'请输入{args[0]} - {args[1]}的小数')
  51. # 输入任意正确范围的小数
  52. def input_float(msg: str = '请输入一个小数:', *args: float) -> float:
  53.     while 1:
  54.         n = input(msg)
  55.         t = n[1: ] if n[0] == '-' else n
  56.         if t.count('.') == 1 and t.find('.') > 0 and t.find('.') != len(t) - 1:
  57.             t1 = t[: t.find('.')]
  58.             t2 = t[t.find('.') + 1: ]
  59.             if fun(t1) and fun(t2) and fun2(float(n), *args) is not None:
  60.                 return float(n)
  61.         elif t.count('.') <= 1 and fun(t) and fun2(float(n), *args) is not None:
  62.             return float(n)
  63.         else:
  64.             print('输入的不是小数')
  65.         pass
  66.     pass
复制代码
input_util_test.py文件:
  1. # 使用其他文件的函数必须导入
  2. from input_util import *
  3. n = input_int()
  4. print(n)
  5. n = input_int('请输入一个正整数:', 0)
  6. print(n)
  7. n = input_int('请输入一个 1 - 10 的整数:', 1, 10)
  8. print(n)
复制代码

  1. # 使用其他文件的函数必须导入
  2. from input_util import *
  3. n = input_float()
  4. print(n)
复制代码

1.5.匿名函数

python 利用 lambda 来创建匿名函数。所谓匿名,意即不再利用 def 语句如许尺度的形式定义一个函数。


  • lambda 只是一个表达式,函数体比 def 简朴很多。
  • lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。
  • lambda 函数拥有本身的命名空间,且不能访问本身参数列表之外或全局命名空间里的参数。
  • 虽然 lambda 函数看起来只能写一行,却不等同于 C 或 C++ 的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。(匿名函数的作用重要是节省内存,由于没著名字,用完之后在内存中就销毁了。如果著名字,啥时候开释才会销毁。)



sorted() 函数源码:




1.6.参数传递问题

在 Python 中,参数传递可以是通过值传递(传递对象的副本)或引用传递(传递对象的引用,即对象在内存中的地址)举行的,具体取决于传递的对象类型和怎样在函数中处置惩罚参数。


  • 不可变类型:当传递不可变对象(如数字、字符串、元组等)作为参数时,实际上是通过值传递举行的。这意味着函数内部的操纵不会影响原始对象。
  • 可变类型:当传递可变对象(如列表、字典、集合等)作为参数时,实际上是通过引用传递举行的。这意味着函数内部的操纵大概会修改原始对象。



2.冒泡排序

2.1.冒泡排序规则

冒泡排序是一种简朴的排序算法。它重复地走访过要排序的数列,一次比力两个元素,如果它们的序次错误就把它们交换过来。走访数列的工作是重复地举行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是由于越小的元素会经由交换逐步“浮”到数列的顶端。
算法描述:

  • 比力相邻的元素,如果第一个比第二个大,就交换它们两个;
  • 对每一对相邻元素作同样的工作,从开始第一对到末端的末了一对,如许在末了的元素应该会是最大的数;
  • 针对所有的元素重复以上的步调,除了末了一个;
  • 重复步调1~3,直到排序完成。

2.2.冒泡排序实现




3.math 模块

math 模块是 Python 的尺度库之一,提供了各种数学运算和函数。通过导入 math 模块,可以利用其中的函数和常量来举行数学计算和操纵。





4.random 模块

random 是 Python 尺度库中的一个模块,提供了生成伪随机数的功能。通过导入 random 模块,可以利用其中的函数来举行随机数生成、随机序列操纵等。



5.datetime 模块

datetime 是 Python 尺度库中的一个模块,提供了处置惩罚日期和时间的功能。通过导入 datetime 模块,可以利用其中的类和函数来操纵日期、时间、时间隔断等。

datetime — Basic date and time types — Python 3.13.0 documentation




  1. # 作业1
  2. import math
  3. from input_util import *
  4. s = '''200
  5. 388
  6. 123
  7. 456
  8. 987
  9. 342
  10. 767
  11. 234
  12. 124
  13. 345
  14. 123
  15. 234'''
  16. vals = [int(i) for i in s.split('\n')]
  17. print(vals)
  18. data = {i + 1 : vals[i] for i in range(len(vals))}
  19. print(data)
  20. # 设计函数
  21. # 函数:起止月份
  22. # 返回值:需要
  23. def get_avg_number(start: int, end: int, data: dict = data) -> int: # data: dict = data 第一个 data 是形参,第二个 data 是实参,dict 是字典类型
  24.     sum_ = 0
  25.     for i in range(start, end + 1):
  26.         sum_ += data[i]
  27.     return math.ceil(sum_ / (end - start + 1)) # return 结束函数并返回结果
  28. start = input_int('请输入开始的月份:', 1)
  29. end = input_int('请输入结束的月份:', start, 12)
  30. avg_ = get_avg_number(start = start, end = end)
  31. print(avg_)
复制代码
  1. # input_util# 封装 2 个函数
  2. # 输入任意正确范围的整数
  3. # 参数:提示语句,不定长参数(约束范围)
  4. # 返回值:需要
  5. def input_int(msg: str = '请输入一个整数:', *args: int) -> int:
  6.     while 1:
  7.         n = input(msg)
  8.         if n.isdigit() if n[0] != '-' else n[1: ].isdigit():
  9.             n = int(n)
  10.             if len(args) == 0:
  11.                 return n
  12.             
  13.             elif len(args) == 1:
  14.                 if n >= args[0]:
  15.                     return n
  16.                 else:
  17.                     print(f'请输入大于等于{args[0]}的整数')
  18.             else:
  19.                 if args[0] <= n <= args[1]:
  20.                     return n
  21.                 else:
  22.                     print(f'请输入{args[0]} - {args[1]}的整数')
  23.         else:
  24.             print('输入的不是数字')
  25.     pass
  26. # 判断整数部分&小数部分是不是数字
  27. def fun(n: str) -> bool:
  28.     if n.find('.') == -1 and n.isdigit(): # 没有 .
  29.         return True
  30.     elif n.find('.') == 0: # . 在开头
  31.         if n[1:].isdigit():
  32.             return True
  33.     elif n.find('.') == len(n) - 1: # . 在最后
  34.         if n[: -1].isdigit():
  35.             return True
  36.         
  37. # 传范围
  38. def fun2(n: float, *args: float) -> float:
  39.     if len(args) == 0:
  40.         return n
  41.     elif len(args) == 1:
  42.         if n >= args[0]:
  43.             return n
  44.         else:
  45.             print(f'请输入大于等于{args[0]}的小数')
  46.     else:
  47.         if args[0] <= n <= args[1]:
  48.             return n
  49.         else:
  50.             print(f'请输入{args[0]} - {args[1]}的小数')
  51. # 输入任意正确范围的小数
  52. def input_float(msg: str = '请输入一个小数:', *args: float) -> float:
  53.     while 1:
  54.         n = input(msg)
  55.         t = n[1: ] if n[0] == '-' else n
  56.         if t.count('.') == 1 and t.find('.') > 0 and t.find('.') != len(t) - 1:
  57.             t1 = t[: t.find('.')]
  58.             t2 = t[t.find('.') + 1: ]
  59.             if fun(t1) and fun(t2) and fun2(float(n), *args) is not None:
  60.                 return float(n)
  61.         elif t.count('.') <= 1 and fun(t) and fun2(float(n), *args) is not None:
  62.             return float(n)
  63.         else:
  64.             print('输入的不是小数')
  65.         pass
  66.     pass
复制代码




6.re 模块

6.1.正则表达式语法

re 是 Python 尺度库中的正则表达式模块,提供了对字符串举行正则表达式匹配和操纵的功能。通过导入 re 模块,可以利用其中的函数和方法来执行正则表达式的匹配、更换和查找等操纵。
6.1.1.字符匹配


6.1.2.数量词匹配


6.1.3.特殊字符匹配


6.1.4.边界字符


6.2.python 正则表达式常用函数



  1. # 联系人 curd 正则优化
  2. # 联系人的信息
  3. # 姓名
  4. # 电话
  5. # 邮箱
  6. # 地址
  7. # 需要把 4 条信息保存在字典中
  8. # key: 姓名
  9. # val: 其他
  10. from input_util import input_int
  11. import re
  12. # 定义初始化的数据
  13. data = {
  14.     '泽': ['13012345678', 'qiuzemiao@163.com', '北京市海淀区'],
  15.     '海': ['13012345679', 'xinhaikuan@163.com', '北京市海淀区'],
  16.     '杰': ['13012345688', 'songyingjie@163.com', '北京市海淀区'],
  17.     '帅': ['13012345670', 'liushuai@163.com', '北京市海淀区'],
  18. }
  19. def input_phone() -> str:
  20.     while 1:
  21.         phone = input('请输入手机号:')
  22.         if re.match('^(\+86[\- ])?1[3-9][0-9]{9}$', phone):
  23.             return phone
  24.         print('您输入的手机号有问题')
  25. while 1:
  26.     msg = '1.添加联系人\n'\
  27.         '2.查看联系人\n'\
  28.         '3.修改联系人\n'\
  29.         '4.删除联系人\n'\
  30.         '0.退出\n'\
  31.         '请选择:'
  32.    
  33.     n = input_int(msg, 0, 4)
  34.     match n:
  35.         case 0:
  36.             break
  37.         case 1:
  38.             name = input('请输入联系人姓名:')
  39.             if name not in data:
  40.                 phone = input_phone()
  41.                 email = input('请输入邮箱:')
  42.                 address = input('请输入地址:')
  43.                 data[name] = [phone, email, address]
  44.                 print('添加成功')
  45.                 pass
  46.             else:
  47.                 print('联系人已存在')
  48.             pass
  49.         case 2:
  50.             print('姓名\t电话\t\t邮箱\t\t\t地址')
  51.             for k, v in data.items():
  52.                 print(f'{k}\t', '\t'.join(v), sep = '')
  53.             pass
  54.         case 3:
  55.             a = ['电话', '邮箱', '地址']
  56.             msg = '\n'.join([f'{i + 1}. 修改' + a[i] for i in range(len(a))]) + '\n请选择:'
  57.             n = input_int(msg, 1, len(a))
  58.             
  59.             name = input('请输入姓名:')
  60.             if name in data:
  61.                 data[name][n - 1] = input_phone() if n == 1 else input('请输入' + a[n - 1] + ': ')
  62.                 print('修改成功')
  63.                 pass
  64.             else:
  65.                 print('联系人不存在')
  66.             pass
  67.         case 4:
  68.             name = input('请输入姓名:')
  69.             if name in data:
  70.                 data.pop(name)
  71.                 print('删除成功')
  72.                 pass
  73.             else:
  74.                 print('联系人不存在')
  75.             pass
  76.     print('*' * 60)
  77. # 在终端执行,control + c 是退出
复制代码

  1. # input_util 优化
  2. import re
  3. # 封装 2 个函数
  4. # 输入任意正确范围的整数
  5. # 参数:提示语句,不定长参数(约束范围)
  6. # 返回值:需要
  7. # 传范围
  8. def fun2(n: float, *args: float | int) -> float | int:
  9.     if len(args) == 0:
  10.         return n
  11.     elif len(args) == 1:
  12.         if n >= args[0]:
  13.             return n
  14.         else:
  15.             print(f'请输入大于等于{args[0]}的数字')
  16.     else:
  17.         if args[0] <= n <= args[1]:
  18.             return n
  19.         else:
  20.             print(f'请输入{args[0]} - {args[1]}的数字')
  21. def input_int(msg: str = '请输入一个整数:', *args: int) -> int:
  22.     while 1:
  23.         n = input(msg)
  24.         if re.match('^\-?[0-9]+$', n):
  25.             n = int(n)
  26.             result = fun2(n, *args)
  27.             if result is not None:
  28.                 return n
  29.         else:
  30.             print('输入的不是数字')
  31.     pass
  32. # 输入任意正确范围的小数
  33. def input_float(msg: str = '请输入一个小数:', *args: float) -> float:
  34.     regex1 = '^(\-)?[0-9]*\.[0-9]+$'
  35.     regex2 = '^(\-)?[0-9]+\.[0-9]*$'
  36.     while 1:
  37.         n = input(msg)
  38.         if re.match(regex1, n) or re.match(regex2, n):
  39.             n = float(n)
  40.             result = fun2(n, *args)
  41.             if result is not None:
  42.                 return n
  43.         else:
  44.             print('输入的不是小数')
  45.             pass
  46.         pass
  47.     pass
复制代码



7.json 模块

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。
Python3 中可以利用 json 模块来对 JSON 数据举行编解码,它包罗了两个函数:


  • json.dumps(): 对数据举行编码:python 对象——>json.dumps()——>json 字符串
  • json.loads(): 对数据举行解码:json 字符串——>json.loads()——>python 对象




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊雷无声

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表