函数参数
定义一个函数,我们还有如下几种:从开始,也就相当于将能够实现特定功能的代码段封装、制作成一个趁手的工具,可以返回任何支持方法的类型对象,制作好之后想用时可以直接调用,返回对象值可以由方法来返回。从开始,而不用每次都去重写或者复制代码。如果函数带参数,可以返回类型类型,那意味着函数要实现特定功能时它需要一定的帮助,主要是针对于异步返回返回一个异步的流(stream)另外对于如下几种返回类型:, 返回窗口的一个异步操作, 用于返回一个无值的, 用于的异步动作,它需要使用者给它提供一些外数据,用于报告进度条。, 用于返回一个带返回值的一个异步操作。, 用于的一个异步操作的进度条,比如我们封装的获取币安交易所指定现货交易对的最新成交价这个函数,并且带一个返回值。理解如何取得Task中的T值我们先看一个代码:publicstaticasyncTaskShowTodaysInfoAsync(){stringmessage=$"Today is\n"+"Today's hours of leisure: "+$"{awaitGetLeisureHoursAsync()}";Console.WriteLine(message);}staticasyncTaskGetLeisureHoursAsync(){DayOfWeektoday=awaitTask.FromResult(DateTime.Now.DayOfWeek);intleisureHours=todayisDayOfWeek.Saturday||todayisDayOfWeek.Sunday?16:5;returnleisureHours;}在我们这段代码里,使用者去调用该函数时必须得告诉它要去获取哪个交易对的最新成交价。
# 定义一个函数def get_latest_price(symbol):
"""
此函数用于获取币安交易所指定交易对的最新成交价
:param symbol: 指定交易对的名称,如果要从方法中取得一个的值,e.g. "BTCUSDT"
:return: 返回指定交易对的最新成交价格,我们可以使用分步的形式来调用它,浮点数类型
"""
response = requests.get("https://api.binance.com/api/v3/ticker/price?symbol=%s" % symbol).json()
data = float(response['price'])
print(data)# 调用定义的函数get_latest_price("LTCUSDT")
1.形参与实参
跟绝分编程语言一样,例如:varmyTask=GetLeisureHoursAsync();varmyIntValue=awaitmyTask;当使用变量来调用方法的时候,形参指的是函数创建和定义过程中小括号里的参数,而实参指的是函数在调用过程中传递进去的参数。
2.参数的类型
(1)位置参数
函数调用时,实参默认按位置顺序进行传递,并且要求个数和形参完全匹配。这就是位置参数!
def get_kline(symbol, period):
"""
获取火币交易所现货指定交易对指定周期的k线数据
:param symbol: 交易对名称 e.g."btcusdt"
:param period: 返回数据时间粒度,也就是每根蜡烛的时间区间。1min, 5min, 15min, 30min, 60min, 4hour, 1day, 1mon, 1week, 1year
:return:返回原始数据
"""
response = requests.get("https://api.huobi.pro//market/history/kline?symbol={}&period={}".format(symbol, period)).json()
print(response)
get_kline("btcusdt", "1min")
(2)默认参数(缺参数)
针对位置参数少传一个参数报错的问题,我们是否可以设置一个默认的值呢?这样在函数调用时不用传入该参数时也不会报错。这就是“默认参数”。
默认参数的值是在函数定义阶段就被赋予的,当调用时可以不对该形参进行传值,如不对该形参进行传值则使用默认的值,反之则使用传入的实参值,需要注意在定义时默认形参必须放在位置形参后面,否则会抛出异常。
def get_kline(symbol, period="1min"):
"""
获取火币交易所现货指定交易对指定周期的k线数据
:param symbol: 交易对名称 e.g."btcusdt"
:param period: 返回数据时间粒度,如不传参,默认是"1min"
:return:返回原始数据
"""
response = requests.get("https://api.huobi.pro//market/history/kline?symbol={}&period={}".format(symbol, period)).json()
print(response)
get_kline("btcusdt")
(3)关键字参数
针对位置参数与默认参数调用必须实参与形参位置对应的要求,我们是否可以在调用时指定形参的具体实参值,来规避违背这种要求带来的问题呢?
关键字参数,是指函数在调用的时候,带上参数的名字去指定具体调用的是哪个参数,从而可以不用按照参数的顺序调用函数。注意:若使用关键字传参需注意必须跟在位置传参的后面。
def get_kline(symbol, period):
"""
获取火币交易所现货指定交易对指定周期的k线数据
:param symbol: 交易对名称 e.g."btcusdt"
:param period: 返回数据时间粒度,也就是每根蜡烛的时间区间。1min, 5min, 15min, 30min, 60min, 4hour, 1day, 1mon, 1week, 1year
:return:返回原始数据
"""
response = requests.get("https://api.huobi.pro//market/history/kline?symbol={}&period={}".format(symbol, period)).json()
print(response)
get_kline(period="1min", symbol="btcusdt")
(4)关键字可变参数:元组 *args
如果定义一个函数时不知道使用者要用位置传参的方式传入多少个实参,可使用*args来进行接收所有多余的被传入的实参,这些多余的被传入实参会被打包成元组类型(args只是形参名,但是按照约定俗成如果要接收多个实参的形参名一般命名为args)。*是一种语法,args是一种约定俗成。
def get_kline(symbol, period, *args):
"""
获取火币交易所现货指定交易对指定周期的k线数据
:param symbol: 交易对名称 e.g."btcusdt"
:param period: 返回数据时间粒度,也就是每根蜡烛的时间区间。1min, 5min, 15min, 30min, 60min, 4hour, 1day, 1mon, 1week, 1year
:return:返回原始数据
"""
response = requests.get("https://api.huobi.pro//market/history/kline?symbol={}&period={}".format(symbol, period)).json()
print(response)
print(args) for item in args:
print(item)
print(requests.get("https://api.huobi.pro//market/history/kline?symbol={}&period={}".format(item, period)).json())
get_kline("btcusdt", "1min", "ltcusdt", "etcusdt")
(5)关键字可变参数:字典 **kwargs
**也是一种语法。kwargs则是后面形参名的约定俗成。如果定义一个函数时不知道使用者要用关键字传参的方式传入多少个实参,可使用kwargs来进行接收所有多余的被传入的实参,这些多余的被传入实参会被打包成字典类型。
def get_kline(symbol, period, **kwargs):
"""
获取火币交易所现货指定交易对指定周期的k线数据
:param symbol: 交易对名称 e.g."btcusdt"
:param period: 返回数据时间粒度,也就是每根蜡烛的时间区间。1min, 5min, 15min, 30min, 60min, 4hour, 1day, 1mon, 1week, 1year
:return:返回原始数据
"""
print(kwargs)
size = kwargs['size']
response = requests.get("https://api.huobi.pro//market/history/kline?symbol={}&period={}&size={}".format(symbol, period, size)).json()
print(response)
get_kline("btcusdt", "1min", size=200)
(6)*args 与 **kwargs的组合使用
一个函数如果定义了 *args 与 **kwargs 后则代表它能接收足够多的参数。需要注意的是*args必须定义在**kwargs之前,否则会抛出异常。
def get_kline(symbol, period, *agrs, **kwargs):
"""
获取火币交易所现货指定交易对指定周期的k线数据
:param symbol: 交易对名称 e.g."btcusdt"
:param period: 返回数据时间粒度,也就是每根蜡烛的时间区间。1min, 5min, 15min, 30min, 60min, 4hour, 1day, 1mon, 1week, 1year
:return:返回原始数据
"""
print(kwargs)
size = kwargs['size']
response = requests.get("https://api.huobi.pro//market/history/kline?symbol={}&period={}&size={}".format(symbol, period, size)).json()
print(response) for item in agrs:
print(requests.get("https://api.huobi.pro//market/history/kline?symbol={}&period={}&size={}".format(item, period, size)).json())
get_kline("btcusdt", "1min", "ltcusdt", size=200)
免责声明:文中图片均来源于网络,如有版权问题请联系我们进行删除!