此系列主要记录若干年前学习Python的心路历程,本文为第四章Python函数的定义和使用
函数是一段具有特定功能的可重用的语句组
def <函数名>(<参数(0个或多个)>):
<函数体>
return <返回值>
例如:
#求n的阶乘
def cal(N):
ans = 1
for i in range(1,N+1):
ans *= i
return ans
n = eval(input("请输入一个整数:"))
print("{}的阶乘为{}".format(n,cal(n)))
def <函数名> (<非可选参数> , <可选参数>): #非可选参数一定要放在可选参数之前
<函数体>
return <返回值>
在上述代码中进行更改,例如:
#计算N的阶乘整除m,如果函数中不传入参数m,那么m默认为1,所以将m称为可选参数
def cal(N,m = 1):
ans = 1
for i in range(1,N+1):
ans *= i
return ans // m
n,m = eval(input("请分别输入两个整数:(用逗号隔开)"))
print("结果为{}".format(cal(n,m)))
使用方式:
# 这与C/C++中的数组传地址有些类似,*参数可以类比于传入一个首地址
def <函数名> (<参数> , *参数):
<函数体>
return <返回值>
例如:
#计算n的阶乘然后再分成与1,2,3,4相乘
#方法1:
def cal(N,*m):
ans = 1
for i in range(1,N+1):
ans *= i
for i in range(len(m)):
ans *= m[i]
return ans
n= eval(input("请输入一个整数:"))
print("结果为{}".format(cal(n,1,2,3,4)))
#方法2:
def cal(N,*m):
ans = 1
for i in range(1,N+1):
ans *= i
for i in m:
ans *= i
return ans
n= eval(input("请输入一个整数:"))
print("结果为{}".format(cal(n,1,2,3,4)))
return保留字用来传递返回值,函数可以有返回值也可以没有返回值,return 可以传递0个返回值,也可以传递多个返回值
例如:
#计算n!,n! * m , n! / m
def cal(N , M = 1):
ans = 1
for i in range(1,N+1):
ans *= i
return ans , ans * M , ans // M
n , m = eval(input("请分别输入两个整数:(用逗号隔开)"))
a,b,c = cal(n,m)
print("{}! = {},{}! * {} = {},{}! / {} = {}".format(n,a,n,m,b,n,m,c))
#输入5,2对应输出结果为:5! = 120,5! * 2 = 240,5!/2 = 60
函数内部使用变量叫做局部变量
函数外部使用变量酒窖全局变量
Tips:全局变量和局部变量即使名字是相同的也是不同的变量
例如:
#可以看到有两个ans变量,但输出结果为3628800 50,所以全局变量和局部变量即使名字一样但也是不同的变量
n,ans = 10,50
def cal(n):
ans = 1
for i in range(1,n+1):
ans *= i
return ans
print(cal(n),ans)
如果想要在函数中使用全局变量,我们可以使用global保留字声明,例如:
n,ans = 10,10
def cal(n):
global ans #这里的ans就是10
for i in range(1,n+1):
ans *= i
return ans
print(cal(n),ans)
-局部变量为组合数据类型且未创建,等同于全局变量
例如:
ls = ["F","f"]
def func(a):
ls.append(a)
func("c")
print(ls)
#输出结果为:["F","f","c"]
<函数名> = lambda <参数>: <表达式>
例如:
f = lambda x,y : x + y
print(f(10,20))
#输出结果为30
实例:
#七段数码管
import turtle as t
import time as ti
def drawline(draw):
t.pendown() if draw else t.penup()
t.fd(40)
t.right(90)
def init(n):
t.penup()
t.fd(n)
def drawdigit(digit):
drawline(True) if digit in [2,3,4,5,6,8,9] else drawline(False)
drawline(True) if digit in [0,1,3,4,5,6,7,8,9] else drawline(False)
drawline(True) if digit in [0,2,3,5,6,8,9] else drawline(False)
drawline(True) if digit in [0,2,6,8] else drawline(False)
t.left(90)
drawline(True) if digit in [0,4,5,6,8,9] else drawline(False)
drawline(True) if digit in [0,2,3,5,6,7,8,9] else drawline(False)
drawline(True) if digit in [0,1,2,3,4,7,8,9] else drawline(False)
t.left(180)
init(15)
def drawdata(s):
t.pencolor("red")
for c in s:
if c == '-':
t.write("年",font = ("Arial" , 25 , "normal"))
t.pencolor("green")
t.fd(60)
elif c == '=':
t.write("月",font = ("Arial" , 25 , "normal"))
t.pencolor("blue")
t.fd(60)
elif c == '+':
t.write("日",font = ("Arial" , 25 , "normal"))
else:
drawdigit(eval(c))
def main():
t.setup(1000,350,200,200)
t.hideturtle()
t.speed(0)
s = ti.strftime('%Y-%m=%d+',ti.gmtime())
init(-300)
t.pensize(5)
drawdata(s)
t.done()
main()