python_函数_参数(args、*args、**kwargs)
实际运用:
class Base:
def findele(self, *args): # 方法中的*args,是将多余的参数,打包成元组。
return self.driver.find_element(*args) # 返回中的*args,是将打的包解开。
# 点击
def click(self, *args):
return self.findele(*args).click()
# 调用后是self.click(By.XPATH,"//*[text()='新闻']"),传入的参数打包成元组发送给findele最终拆包,才能用
# 你问click里面为什么要打包,不打包的话你传入是多个参数呀
# 发送内容
def sendkey(self, args, value):
self.findele(*args).send_keys(value)
# 调用send((By.XPATH,"//*[text()='新闻']"),'发送'),元组一个参数、value一个参数,findele的*args拆包。
详细总结:
# 函数(实参、形参、返回值)
"""
知识点1:函数中的参数:实参、形参 >>> username:形参(就是个变量) tfjiao:实参(变量的实际值)
"""
def greet_user(username):
print(f"hello,{username},你好")
greet_user("tfjiao")
"""
知识点2:实参的传递有2种方式:按参数顺序,不按参数顺序,
"""
class map:
def add_map_source(self, name, mapname, key, size="big", url=""):
"""
添加地图
:param name:地图名
:param mapname: 地图类型
:param key: 地图的秘钥
:return: 实现添加地图的操作
"""
print(name)
print(mapname)
print(key)
# 按参数顺序传参:(必须按照参数的位置)
map().add_map_source("baidumap", "baidu map", "key", "small")
# 不按参数顺序:(必须用关键字,【name="googlemap" 】>>俗称:关键字实参)
map().add_map_source(name="googlemap", key="456", mapname="google map")
# 有默认值的形参,传参时该位置可不写,写的话会覆盖默认值。
# 带值的形参,不传参时候,按照默认值传递实参。
"""
知识点3:return什么意思?"return乬将值返回到调用函数的代码行"
"""
"""
知识点4:传递列表
"""
def greet_user(username):
for i in username:
print(f"hello,{i},你好")
username = [1,2,3]
greet_user(username)
# 传递复制的列表,旧的列表数据不会变动
greet_user(username[:])
# C:\Python39\python.exe D:/se_frame/Cases/MapAaaCases/test_3.py
# hello,1,你好
# hello,2,你好
# hello,3,你好
def sendkey(self, value, *args, **kwargs):
"""
:param self:
:param value: 调用该函数,必须传入这个参数
:param args: *号将value的参数变成元组,传入下去
:return:
"""
self.findele(*args).send_keys(value).main(**kwargs)
sendkey("123", By.ID,"wk", id=1, name=2, key=3 )
# *号打包元组: By.ID,"wk" 这两个参数会被*打包成元组(By.ID,"wk")变为一个参数传递下去(俗称打包元组)。findele(*args)这里面的*会将元组解开(俗称解包)
# **号打包字典: id=1, name=2, key=3:这三个关键字实参,**号代表:你传入任意数量的关键字实参都会被打包成字典(打包字典)。
# 举例:
def tfjiao(name, *args, **kwargs):
print(args) # 未拆包,除了第一个和关键字参数,其他输出是元组类型
print(*args) # 进行拆包,不拆包怎么用,看上面的业务代码。
print(kwargs)# 未拆包,输出是字典类型
print(*kwargs)# 进行拆包(**kwargs无法打印)
tfjiao(1, 2, 3, 4, 8, a= 5, c=7)
# C:\Python39\python.exe D:/se_frame/Cases/MapAaaCases/test_3.py
# (2, 3, 4, 8) >>> 输入的1,是属于name变量,这里打印的是args变量,带括号是因为*打包了元组
# 2 3 4 8 >>> 这里不带括号,是因为输出时候带了*,进行拆包
# {'a': 5, 'c': 7} >>> 这里输出的是形参,以字典的形式
# a c
从不同角度 加深理解:
位置实参、关键字实参、默认形参、元组型可变形参、字典型可变形参
# 位置实参:普通的实参 按照参数的顺序把数据传递给形参
def sum_fun(num1,num2=666,*args,):
plus = num1*num2
print("两个数字的乘积=%s" % plus)
sum_fun(2, 3)
test_fun(num1=3,num2=4)
# 位置实参:2和3
# 关键字实参:num1=3,num2=4
def test_fun(num1,num2=10):
print(num1)
print(num2)
test_fun(2)
# 默认形参:num2=666 (如果设置实参,就会使用实参.如果不设置实参,就会使用默认形参)
def args_fun(*args):
sum_plus = 0
for i in args:
sum_plus += i
print(sum_plus)
args_fun(1, 2, 3, 4,)
# 元组型可变形参:*args(传进来的任意位置参数会被包装成为元组,随后赋值给args)
def stu_info_fun(**kwargs):
name = kwargs.get("name", "暂无")
age = kwargs.get("age", "暂无")
weight = kwargs.get("weight", "暂无")
print("姓名:%s,年龄:%s,体重:%s" % (name,age,weight))
stu_info_fun(name='王', age=19, weight=140)
# 字典型可变形参:**kwargs(给形参前面添加**,标志其为字典型可变形参,传进来的任意位置参数会被包装成为字典,随后赋值给kwargs)