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)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿_焦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值