函数的参数类型


1.1 形参与实参

  形参(形式参数):在定义函数阶段,定义的参数称之为形参,粗略的可以认为是变量名。
  实参:在调用函数阶段传入的值称之为实际参数,简称实参,粗略的可以认为是变量值。
def ware_info(vendor_name, store_name, sku):   return "{}商家下的门店{}不存在该品".format(vendor_name, store_name, sku) ware_info("北京XX","中关村店","10234567")

1.2 位置参数与关键字参数

  位置参数: 按照从左往右的顺序依次定义的变量名,且必须被传值,多一个少一个都不可以
  关键字实参:在函数调用的阶段,按照键值对的方式传入值可以完全不参照顺序,给某个形参传值。
  
def login_params(phone, pwd, username):   param = {"phone": "{}".format(phone),         "pwd": "{}".format(pwd),         "username": "{}".format(username),         "loginType": 1,         "setPwd": 0}   return param  #位置参数:基于位置
 print(login_params("189000000", "123456", 'DY'))  #关键词参数:基于关键词指定
 print(login_params(username="DY", pwd="123456", phone="189000001"))   # 混搭
 print(login_params("123456", "189000000", username="DY"))
规则:先位置后关键词,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序的

1.3 强制关键字参数

  引入*标记,“*”之后的都是强制关键字参数。

  强制关键字参数的赋值必须显示通过关键字传入。

  当强制关键字参数无默认值时,调用时必须给其赋值,否则报错;当强制关键字参数有默认值时,若调用时不给其显示赋值,其使用默认值。

def ware_info(*, vendor_name, store_name, sku):   return "{}商家下的门店{}不存在该品".format(vendor_name, store_name, sku) print(ware_info(vendor_name="北京物美",store_name="中关村店",sku="10234567"))

1.4 默认参数

  用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)
def ware_info(store_name, sku, vendor_name="北京XX"):   return "{}商家下的门店{}不存在该品".format(vendor_name, store_name, sku) ware_info("中关村店","10234567")
注:当系统默认值是一个空值的时候,系统只提供一个,因此写成None,而不是写成一个空列表或空集合,会污染前面数据:
  
def my_method(a, b=[]): b.append(a) print(b)

1.5 可变参数(不定长参数):*args与**kwargs

  可变长度是指在调用函数时,传入的值(实参)不固定。
  可变位置参数:*args 输出类型为元组。
def calc(*numbers):   total = 0   for n in numbers:     total += n**2
  return total print(calc(1,2,3)) print(calc(1,3,5,7))
  关键字参数:(**kwargs) 输出为字典。
  sorted是个不定长,sorted(a)与sorted(a, key=len)
def get_info(name, sex, **kwargs):   for msg, info in kwargs.items():     print("{}的性别为{}, 其他信息为".format(name, sex) + msg + ":" + info) get_info("张三", "", store_id="12", store_name="zgc" )
  编写生成一个get请求地址的函数,入参含有hostname, url="", param={},根据以上参数返回一个get请求的完整链接,param和URL有可能不传。
def get_host(hostname, path=None, **params):   url = "http://{}/".format(hostname)   if path:     url += path   if params:     param_list = []     for paramsName, paramValue in params.items():       param = "{}={}".format(paramsName, paramValue)       param_list.append(param)     url = url + "?" + "&".join(param_list)   return url

print(get_host("cmsapi.dmall.com", path="/app/web/json", currentPage=1, isForceHome=0))
参数定义的顺序必须是:必选参数、默认参数、可变参数。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM