• python_base_day_006


    参数

    必选参数(位置参数):必须传入,且位置一一对应

    def calc(x, y):
    	print(str(x - y))
    
    • 按位置的顺序传入

    calc(3, 5) # 结果为:-2

    • 也可以指定名称传入

    calc(y=6, x=2) # 结果为:-4

    • 必选参数如果不传入会报错TypeError: calc() missing 1 required positional argument: 'y'

    calc(3)

    默认参数:指定默认值的参数(可传可不传)

    def calc(x, y=7):
    	print(str(x - y))
    
    • 默认参数可以传入

    calc(3, 8) # 结果为:-5

    • 默认参数可以不传入

    calc(1) # 结果是:-6

    可变长参数:可以传入长度不固定的参数

    • 可变参数一般用*args表示,传入后会被当做元组来处理

        def pp(x, y=5, *args):
        	print(x y)
        	print(type(args))
        	print(args)
      

    pp(3, 7, 'a', [1, 2, 3])

    执行结果为:
    -4  # 此处因为默认参数传入了值,所以计算的是3-7=-4
    <class 'tuple'>  # 可以看到后面的*args被处理成了元组传入
    ('a', [1, 2, 3])  # 此处为args的值
    

    pp(3, 9, 'a', [1, 2, 3], 'c')

    执行结果为:
    -6  # 此处因为默认参数传入了值,所以计算的是3-9=-6
    <class 'tuple'>  # 可以看到后面的*args被处理成了元组传入
    ('a', [1, 2, 3], 'c')  # 此处为args的值
    
    关键字参数(可变长参数):以关键字的形式传入的参数
    • 关键字参数一般用**kwargs来表示,传入后会被当作字典来处理

        def dd(x, y, *args, **kwargs):
            print(str(x - y))
            print(args)
            print(type(kwargs))    
            print(kwargs)
      
    • 直接传入字典

    dd(2, 4, 'a', 'c', **{'s': 1, 'w': 5})

    执行结果为:
    -2
    ('a','c')
    <class 'dict'>
    {'s': 1, 'w': 5}  # 关键字参数如果传入字典的话,需要在字典前加**
    
    • 指定关键字传入

    dd(2, 8, 'a', n=4, k=['a', 'b'], s=6)

    执行结果为:
    -6
    ('a',)  # 此处是可变参数(无论传入多少均被当成元组传入)
    <class 'dict'>  # 关键字参数被当作字典来处理
    {'n': 4, 'k': ['a', 'b'], 's': 6}  # 此处为关键字参数组成的字典
    

    参数传入顺序:必选参数,默认参数,可变长参数,关键字参数

    def info(a, b=3, *args, **kwargs):
    	print(a)
    	print(b)
    	print(args)
    	print(kwargs)
    

    info(1, 4, 3, 'a', ['b', 'c'], {'k': 1, 'v': 2}, (5, 's'), g=1, k='aa')

    执行结果为:    
    1
    4
    (3, 'a', ['b', 'c'], {'k': 1, 'v': 2}, (5, 's'))  # 无论传入什么类型,均被存放在元组中
    {'g': 1, 'k': 'aa'}  # 关键字参数被处理成字典
    

    info(1, *(4, {'w': 2, 's': 'a'}, 1), **{'k': 1, 'v': 2})

    执行结果为:    
    1
    4  # 即使是用*传入,但是也会被拆包,并按位置的顺序赋值给b
    ({'w': 2, 's': 'a'}, 1)  # 然后把剩下的当作元组传入args
    {'k': 1, 'v': 2}  # **传入的字典,被当做关键字函数传入
    

    练习

    第一题:现有数据如下

    users_title = ["name", "age", "gender"]

    users_info = [['小明', 18, '男'], ["小李", 19, '男'], ["小美", 17, '女']]

    要求:将上述数据转换为以下格式

    users = [{'name': '小明', 'age': 18, 'gender': '男'},
    {'name': '小李', 'age': 19, 'gender': '男'},
    {'name': '小美', 'age': 17, 'gender': '女'}]

    • 方法1:使用内置函数zip

        def deal_info_1(user_title, user_info):
        	users = []
        	for info in user_info:
            	users.append(dict(zip(user_title, info)))
        	return users
      
    • 方法2:使用dict([元组])的形式生成字典

        def deal_info_2(user_title, user_info):
        	res = []
        	for info in user_info:
        		res.append(dict([(user_title[0], info[0]), (user_title[1], info[1]), (user_title[2], info[2])]))
        	return res
      

    运行:

    	if __name__ == '__main__':
    		print(deal_info_1(users_title, users_info))
    		print(deal_info_2(users_title, users_info))
    

    结果为:

    [{'name': '小明', 'age': 18, 'gender': '男'}, {'name': '小李', 'age': 19, 'gender': '男'}, {'name': '小美', 'age': 17, 'gender': '女'}]
    [{'name': '小明', 'age': 18, 'gender': '男'}, {'name': '小李', 'age': 19, 'gender': '男'}, {'name': '小美', 'age': 17, 'gender': '女'}]
    

    第二题:请封装一个函数,按要求实现数据的格式转换

    传入参数: data = ["{'a':11,'b':2}", "[11,22,33,44]"]

    返回结果:res = [{'a': 11, 'b': 2}, [11, 22, 33, 44]]

    通过代码将传入参数转换为返回结果所需数据,然后返回

    # 使用内置函数eval
    def transfer_1(source):
    	res = []
    	for i in source:
    		res.append(eval(i))
    	return res
    
    
    if __name__ == '__main__':
    	data = ["{'a':11,'b':2}", "[11,22,33,44]"]
    	print(transfer_1(data))
    

    结果为:

    [{'a': 11, 'b': 2}, [11, 22, 33, 44]]
  • 相关阅读:
    新建存储过程
    c#List移除列表中的元素
    学习总结初篇:发现问题
    webpack的几个使用方法
    Does Lamda expression return value?
    委托的最佳科普解释
    正则表达式字符匹配攻略
    Beta冲刺 第一天
    ###Beta准备
    高校征信系统项目Postmortem结果
  • 原文地址:https://www.cnblogs.com/wjlv/p/12185167.html
Copyright © 2020-2023  润新知