1、函数:
函数,就是完成某个工作的代码块,用来构建更大程序的一个小部分,就像积木搭房子一样
创建一个函数:
# 定义一个函数
def printMyAddress():
print ("Candy")
print ("123 Street")
print ("Ottawa,Ontario,Canada")
print ("k 123")
print ("Done")
# 调用一个函数
printMyAddress()
def块中的代码并不是主程序的一部分,程序运行时会跳过这一部分,从def块以外的第一行代码开始运行:
1、从printMyAddress()开始,这个是主程序
2、调用函数时,跳到函数中的第一行代码
3、执行函数的每一行代码
4、函数完成时,从离开主程序的那个位置继续执行
2、调用函数:
只有调用函数,才会执行
语法:函数名(参数arguments) # 参数可以没有
用途:1、在不同的地方反复调用 (循环就无法满足不同地方了)
2、每次运行都有不同表现
3、向函数传递参数
定义一个变量(不加引号就是变量),变量name会填入调用函数时为它传入的任何参数
语法:函数名(参数值)
# 定义一个函数
def printMyAddress(name): # 参数名!!!
print (name) # 变量不能加引号!!!
print ("123 Street")
print ("Ottawa,Ontario,Canada")
print ("k 123")
print() # 有括号,别忘了
# 调用一个函数
printMyAddress("apple")
# 调用一个函数
printMyAddress("banana")
# 调用一个函数
printMyAddress("candy”)
结果:
apple
123 Street
Ottawa,Ontario,Canada
k 123
banana
123 Street
Ottawa,Ontario,Canada
k 123
candy
123 Street
Ottawa,Ontario,Canada
k 123
4、有多个参数的函数
2个参数:
# 定义一个函数
def printMyAddress(name,houseNo): # 参数名!!!
print (name) # 变量不能加引号!!!
print ("123 Street")
print ("Ottawa,Ontario,Canada")
print (houseNo)
print() # 有括号,别忘了
# 调用一个函数
printMyAddress("apple","1") # 用逗号分割多个参数,像列表一样!!!
结果:
apple
123 Street
Otawa,Ontario,Canada
1
5、6个参数:把参数放到一个列表中,这样只传递一个变量(列表变量),含了一组值
# 定义一个函数
def printMyAddress(a): # 参数名!!!
print (a[0]) # 变量不能加引号!!!a[0] 的格式!!!
print (a[1])
print (a[2])
print (a[3])
print() # 有括号,别忘了
l=["candy","123 Street","Ottawa,Ontario,Canada","22"]
# 调用一个函数
printMyAddress(l) #
结果:
candy
123 Street
Ottawa,Ontario,Canada
22
5、返回值的函数
函数返回的值称为结果result和返回值return value,返回值会回到调用这个函数的代码
# 定义一个函数
def calcuTax(price,tax_rate):
taxTotal=price+(price*tax_rate)
return taxTotal
# 调用函数会返回一个值,把函数的返回值赋值给变量totalPrice
totalPrice=calcuTax(7.99,0.06)
# 把函数的返回值赋值,在另一个表达式中使用
total=calcuTax(7.99,0.06)+calcuTax(3.33,0.06)
# 或者打印出来
print (calcuTax(7.99,0.06))
# 不做任何处理
calcuTax(7.99,0.06)
6、变量作用域
Total 和 totalPrice是贴在同一个东西上的两个标签
对于函数而言,函数内的名字只是在函数运行时才会创建,在函数运行之前或者完成执行之后甚至根本不存在。Python提供了内存管理,自动完成这个工作
在函数运行时会创建新的名字在函数内使用,当函数完成时会把他们删除
在函数运行结束时,其中的所有名字都不再存在!!!
函数运行时,函数之外的名字被搁置一边,没有用到。只有函数内部的名字会被用到。
程序中使用变量的部分,叫这个变量的作用域
局部变量:
如果变量只在函数内使用,这些变量是局部变量 (local)
使用范围:函数内;在函数外不能使用:函数外打印局部变量,会报错:name ‘price’ is not defined
函数运行时,局部变量才存在
# 定义一个函数
def calcuTax():
tax_rate =2.9
print("局部变量:",tax_rate)
结果:
Traceback (most recent call last):
File "/Users/rlj/Desktop/python学习/1.py", line 8, in <module>
print("局部变量:",tax_rate)
NameError: name 'tax_rate' is not defined
全局变量:
函数之外定义的变量是全局变量 (global)
使用范围:任何地方使用
在函数内可以使用,但是不要试图改变它;
任何部分试图改变全局变量,需要创建一个新的局部变量。所以不会影响全局变量的值,如下:
# 定义一个函数
def calcuTax():
tax_rate =2.9
print ("生成的局部变量:",tax_rate)
return tax_rate
tax_rate= 3
print("全局变量:",tax_rate)
calcuTax()
print("全局变量:”,tax_rate)
结果:
全局变量: 3
局部变量: 2.9
全局变量: 3
7、强制为全局
从函数内改变一个全局变量的值,需要用global关键字。
python不会建名为tax_rate的局部变量,而是使用名为tax_rate的全局变量;
如果没有名为tax_rate的全局变量,就创建一个
# 定义一个函数
def calcuTax():
# 强制为全球变量要分两行,否则报错,但是不建议这样用!!
global tax_rate
tax_rate =2.9
print ("生成的局部变量:",tax_rate)
return tax_rate
tax_rate= 3
print("全局变量:",tax_rate)
calcuTax()
print("全局变量:",tax_rate) # 值就变了
结果:
全局变量: 3
生成的局部变量: 2.9
全局变量: 2.9
练习1:
# 定义一个函数
def info(name,add,street,city,province,zipcode,country): # 记得写参数名
print (name)
print (add)
print (street)
print (city)
print (province)
print (zipcode)
print (country)
print() # 有括号,别忘了
def info2(l):
print (l[0])
print (l[1])
print (l[2])
print (l[3])
print (l[4])
print (l[5])
print (l[6])
print()
info("a","sdf","1 street","beijing","beijing","100000","china")
info2(["a","sdf","1 street","beijing","beijing","100000","china”])
练习2: 输入硬币个数,并计算总和
代码1:
# 定义一个函数
def calcuMoney(num):
print ("5分: ",num[0]) # 如果直接传入列表,num[0] 是 int
print ("2分: ",num[1])
print ("1分: ",num[2])
print ("total is: %d" %(num[0]*5+num[1]*2+num[2]*1) )
calcuMoney([1,1,1])
结果:
5分: 1
2分: 1
1分: 1
total is: 8
代码2:
# 定义一个函数
def calcuMoney(num):
print ("5分: ",num[0]) # num[0] 是 str
print ("2分: ",num[1])
print ("1分: ",num[2])
print ("total is: %d" %(int(num[0])*5+int(num[1])*2+int(num[2])*1) )
input_number=input("请输入5分、2分、1分各几个,用空格分开:") # 是str类型
calcuMoney(list(input_number.split()))
结果:
请输入5分、2分、1分各几个,用空格分开:1 2 3
5分: 1
2分: 2
1分: 3
total is: 12
知识点:
>>> input_number=input("请输入5分、2分、1分各几个,用空格分开:")
请输入5分、2分、1分各几个,用空格分开:1 2 3
>>> print(input_number)
1 2 3
>>> type(input_number)
<class 'str'>
>>> input_number.split()
['1', '2', '3’] 里面是字符串
>>> list(input_number.split())
['1', '2', '3']
>>> list(input_number.split())[0]
‘1’ str型
>>> l=[1,2,3]
>>> l[0]
1 int型