给一段代码起个名字
函数是一段有名字、可以反复运行的代码。用 def、函数名、括号和冒号定义它一次,下面缩进的代码块就是函数体。return 把一个值交还给调用函数的地方。调用函数就是写出函数名,加上括号和要处理的值。
def gross_value(price, quantity):
return price * quantity
print(gross_value(184.25, 200)) # 36850.0形参与实参
def 括号里的名字是形参,是输入的占位符。调用时传入的值是实参,它们按顺序填入形参。顺序调换,结果就会变化;实参个数不对则会报错。每次调用都会得到一份全新的形参。
# Arguments fill the parameters in order
def spread(bid, ask):
return ask - bid
print(spread(184.25, 184.5)) # 0.25
print(spread(184.5, 184.25)) # -0.25return 不等于 print
print 是为人把内容显示在屏幕上;return 则把值交给调用它的代码,使其可以继续使用。没有 return 的函数会返回 None,意思是“什么也没有”。负责计算的函数应当返回结果,是否打印由调用方决定。
# A function with no return gives back None
def show(price):
print("price", price)
result = show(184.25) # price 184.25
print(result) # None相互叠加的小函数
函数可以调用其他函数,因此可以用小而易测试的部件搭出复杂的行为。让每个函数只做一件事,并起一个说明它的名字。紧跟在 def 下面的字符串叫 docstring,用来向下一个读者解释它。要在调用它的那一行运行之前先定义好函数。
# Small functions build bigger ones
def gross_value(price, quantity):
"""Value of a position before costs."""
return price * quantity
def commission(gross):
"""0.1% of the value, but never less than 1.0."""
return max(1.0, gross * 0.001)
def net_cost(price, quantity):
"""What the position really costs: value plus commission."""
gross = gross_value(price, quantity)
return gross + commission(gross)
print(net_cost(184.25, 200)) # 36886.85返回多个值
return a, b 会把两个值作为一个元组一并返回:用逗号写成的有序数对(元组很快会有专门的一节)。调用方可以立刻给这两部分命名。用 // 和 % 把 1,000 股的订单拆成 3 份,就会返回每份的大小以及剩余的股数。
# return several values as a tuple
def split_fill(quantity, slices):
return quantity // slices, quantity % slices
size, leftover = split_fill(1000, 3)
print(size, leftover) # 333 1return 会结束函数Python 在执行到第一个
return 时就离开函数,该路径上它之后的代码不会再运行。形参以及你在函数内创建的变量只在调用期间存在,外部代码看不到它们(详见“作用域”一节)。- 一个函数只做一件事,名字要说明它返回什么。
- 计算后
return,打印交给调用方。 - 加上说明输入与输出的 docstring。
下一节:函数参数与默认值,学习用名称、可选值和任意数量的参数来调用函数。
实验:评分内容
- 用
gross_value定义一个计算持仓价值的函数25 分 - 用
commission计算带最低收费的佣金25 分 - 用
net_cost由两个函数组合出实际成本25 分 - 用
split_fill一次返回两个值25 分