python3元字符和函数参数

IPO:input process output

正则:
元字符(具有特殊意义的专用字符/用来描述字符串的边界的元字符):
^ 开始
$ 结尾
常用的元字符:
. 匹配任意字符(除\n)
\w 匹配字母、数字、下划线
\W 匹配非字母、数字、下划线
\s 匹配任意空白字符
\S 匹配任意非空白字符
\b 匹配位于开头或者结尾的空字符串
\d 匹配任意十进制数

限定符(限定符用于限定匹配的次数):
? 用于匹配前面的字符0次或1次
+ 匹配前面的字符1次或多次
* 匹配前面的字符0次或多次
{n} 匹配前面的字符n次
{n,}匹配前面的字符最少n次
{n,m} 匹配前面的字符最小n次,最多m次

其他字符:
区间字符[] 匹配[]中所指定的字符 [0-9] 匹配0-9的数字
排除字符^ 匹配不在[]中指定的字符 [^0-9] 匹配除0-9之外的字符
选择字符 | 用于匹配 | 左右的任意字符
转义字符 \
[\u4e00-\u9fa5] 匹配任意一个汉字
分组() 改变限定符的作用 (six|four)th 匹配sixth fourth

函数:
- 概述
- 函数是可以重复执行的语句块,可以重复使用
- 作用
- 用于封装语句块,提高代码的重用性
- 函数定义
def <function_name>(<参数变量>):
语句块

- 用法说明
- 函数的名字就是语句块的名称
- 函数名的命名规则与变量名相同(函数名必须为标识符)
- 函数有自己的namespace。在函数外部不可用访问函数内部的变量,在函数内部可以访问外部的变量,通常让函数处理外部数据需要用参数给函数传入一些数据
- 函数的参数可以为空
- 语句部分不能为空(可以为pass)
- 函数的调用说明
- 函数调用是一个表达式
- 如果没有return语句,函数执行完毕后返回None对象,如果函数需要返回其他对象,需要使用到return语句
- return语句
- 语法
return [表达式] []里面的内容可以省略
- 作用
用于函数中,结束当前函数的执行,返回到调用函数的地方,同时返回一个对象的引用关系
- 说明
- return语句后跟的表达式可以省略,相当于 return None
- 如果函数没有return语句,则函数挂靠完最后一条语句返回None
- 函数调用一定会返回一个对象的引用(默认是None)

- 函数的参数传递
- 实际参数:函数调用处的参数
- 形式参数:函数定义处的参数
- 参数传递方式
位置传递:默认的传递方式,实际参数和形式参数顺序相同
def my_num(a,b,c):
序列传参:函数调用过程中,用*将序列拆解后按位置传参的方式进行参数传递
def my_num(a,b,c):
pass

my_num(1,2,3)
s = [1,2,3] #list和set等都可以是序列
my_num(*s)
关键字参数:函数调用时,按照a="111"(形参名称=值)的方式进行传参,传递参数顺序可以跟形参顺序不同
def my_num(a,b,c):
return a,b,c

my_num(a=1,b=2,c=3)
字典关键字传参:指实参(调用时的参数)为字典,将字典用 ** 拆解后进行关键字传参
def num1(a,b,c):
return a,b,c
d = {"c":"aa","b":"111","a":"ccc"}
print(num1(**d)) # ('ccc', '111', 'aa')
说明:
字典的键名和形参名必须一致
字典键名必须为字符串
字典的健名要在形参中存在
函数的综合传参:函数调用时,在能确定形参能唯一匹配到相应实参的情况下可以任意组合
传参时先位置参数,后关键字传参
# 函数的综合传参
def num2(a,b,c):
pass

aa = {"a":"aaaaa"}
bb = {"a":"aaa","c":"cccc"}
ss = [1,2]
#num2(**aa,*ss) # 错误
num2(**aa,b=1,c=1) # 正确
#num2(**aa,1,1) # 错误,不知道参数该给谁
num2(**bb,b=1) #正确
#num2(**bb,1) # 错误
num2(*ss,c=1) # 正确
关键字参数:函数定义时,直接形式参数进行赋值
在调用时,如果该参数不赋值,则使用该默认参数

可变参数(不定长参数):
存在需要一个函数能处理比当初声明时更多的参数;这些参数叫做不定长参数,基本语法如下:
def print_hello(*world):
pass

print_hello(60,10,20,30)
加了 * 的参数会以元组tuple的形式倒入,存放所有未命名的变量参数
def print_world(arg1,*var):
"""
打印任何传入的参数
:param arg1: 变量1,无限制类型
:param var: 变量2,元组类型,可多传入
:return:
"""
print(arg1)
print(var)

print_world("bushihaoren","qinwengang","bushihaoren","shizhende")
print_world("bushihaoren") # 函数调用时可以不向函数传递未命名的变量,var就是一个空元组

另一种就是参数带两个 ** 基本语法如下:
def print_weiba(a,**b):
"""
参数带两个**
:param a: 位置参数,调用时必须传参
:param b: 可变参数
"""
print(a)
print(b)

print_weiba(1,b=2,c=3,d=4) # {'b': 2, 'c': 3, 'd': 4}
加了两个型号 ** 的参数会以字典的形式导入

声明函数时, 参数中 * 可以单独出现:
# * 单独出现在函数定义中
def pring_weiba1(aa,*,bb):
print(aa)
print(bb)
# * 后面的参数必须以关键字参数的形式传入

pring_weiba1(11,bb=22)
pring_weiba1(11,22) # 报错

可以同时传入* 和 ** 的参数:
def weiba2(aa,*bb,**cc):
print(aa)
pass
s2 = (1,2,3,4,5,6)
d2 = {
"a":"aa",
"b":"bb",
"c":"cc"
}
weiba2(11,s2,d2)

- 匿名函数
Python使用 lambda 来创建匿名函数
所谓匿名,就是不再使用def语句这样标准的形式定义一个函数
lambda函数有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数

posted @ 2023-07-03 09:43  小尾巴想看雪  阅读(59)  评论(0编辑  收藏  举报