1 认识函数
print() 是一个函数
round() 是一个函数
a = 1.3369
b = round(a,2)
c = round(a,3)
print(b) #1.34
print(c) #1.337
help(print) #查看函数的功能
import(this) #查看Python之禅
2 函数的定义及运行特点
def func(para_list):
pass
#para_list可以为空
#return value
#函数会return一个值,默认是返回None
#函数遇到return之后,return后面的值就不会执行了
import sys
sys.setrecursionlimit(9999)
这是定义函数的最大递归深度(小常识积累)
def add(x,y):
result = x + y
return result
def print_code(code):
print(code)
a = add(1,2)
b = print_code('python') #注意这里是字符串
print(a,b)
#Python
#3 None
#注意这个结果,你是否能看懂???
3 函数返回多个结果
#计算游戏中的一个boss产生的伤害
def damage(skill1, skill2):
damage1 = skill1 * 3
damage2 = skill2 * 2 + 10
return damage1, damage2
damages = damage(5, 8)
print(damages) # (15, 26)
print(type(damages)) # <class 'tuple'>
#接收返回结果
skill1_damage, skill2_damage = damage(5, 8)
#这种接收方式叫序列解包。 #易于后期的维护
4 序列解包与链式赋值
a = 1
b = 2
c = 3
a, b, c = 1, 2, 3
d = 1, 2, 3 #这样的赋值形式是对的,不是错的
print(type(d))
#<class 'tuple'>
a,b,c = d
#把一个tuple拆开,赋值给a,b,c就叫序列解包
5 必须参数与关键字参数
# 必须参数
def add(x,y):
result = x + y
return result
add(2,5)
#x,y 是形参
#2,5 是实参
#关键字参数
add(y=5,x=2)
#明确告诉Python你所赋值的实参是给哪一个形参
#意义是提高了代码的可读性
6 默认参数
默认参数要放在非默认参数后面。否则会报错
def print_student_files(name,gender,age,college):
print('我叫' + name)
print('我是' + gender + '生')
print('我今年' + str(age) + '岁')
print('我在' + college + '上学')
print_student_files('小强','男','18','人民路小学')
#我叫小强
#我是男生
#我今年18岁
#我在人民路小学上学
#默认参数
def print_student_files(name,gender='男',age=18,college='人民路小学'):
print('我叫' + name)
print('我是' + gender + '生')
print('我今年' + str(age) + '岁')
print('我在' + college + '上学')
print_student_files('小花','女',15) # 使用默认参数
print_student_files('小丽',age=16) #使用关键字参数
7 可变参数
def demo(*param):
print(param)
print(type(param))
demo(1,2,3,4,5)
#(1, 2, 3, 4, 5)
#<class 'tuple'>
#另一种定义方式。这里等同于可变参数
def demo2(param):
print(param)
print(type(param))
demo2((1,2,3,4,5))
#(1, 2, 3, 4, 5) #运行的结果一样
#<class 'tuple'>
#这样的调用方式结果是一个二维元祖
def demo3(*param):
print(param)
print(type(param))
demo3((1,2,3,4,5))
#((1, 2, 3, 4, 5),) #这是一个二维元祖
#<class 'tuple'> #类型还是 tuple
#这种调用方式可以用
demo(*(1,2,3,4,5))
#或者这样
d = (1,2,3,4,5)
demo(*d) #如果是demo(d) 则会出现一个二维元祖
可变参数可以和其他类型的参数混合使用。必须参数要放在可变参数的前面
#必须参数,可变参数, 默认参数
def demo(param1,*param,param2=8):
print(param1)
print(param)
print(param2)
demo(5,1,2,3,666)
#我们希望的结果是param1=5,param=(1,2,3),param2=666
#运行结果(和我们希望的不一样)
#5
#(1, 2, 3, 666)
#8
#使用关键字参数可以得到我们想要的结果
def demo(param1,*param,param2=8):
print(param1)
print(param)
print(param2)
demo(5,1,2,3,param2=666) #使用关键字参数
#5
#(1, 2, 3)
#666
建议设计参数时不要设计那么复杂
参数有许多的坑,注意!!
8 关键字可变参数
用可变参数求平方和
def squsum(*args):
sum = 0
for i in args:
sum = sum + i * i
#sum += i * i
print(sum)
squsum(1,2) #5
squsum(1,2,3) #14
squsum(*[1,2,3,4]) #也可以这样调用 #30
关键字可变参数
#表示城市的温度
def city_temp(**param):
pass
city_temp(bj='32c', xm='23c', sh='31c')
def city_temp(**param):
print(param)
print(type(param))
city_temp(bj='32c', xm='23c', sh='31c')
#{'bj': '32c', 'xm': '23c', 'sh': '31c'}
#<class 'dict'> #类型是字典
#关键字可变参数
def city_temp(**param):
for c in param:
print(c)
city_temp(bj='32c', xm='23c', sh='31c')
#循环打印键
#bj
#xm
#sh
打印键和值
#先演示一个错误的方式
#关键字可变参数
def city_temp(**param):
for key, value in param:
print(key,':',value)
city_temp(bj='32c', xm='23c', sh='31c')
#b : j
#x : m
#s : h
#正确的方法
def city_temp(**param):
for key, value in param.items(): #items()是一个方法
print(key,':',value)
city_temp(bj='32c', xm='23c', sh='31c')
#bj : 32c #得到了我们想要的结果
#xm : 23c
#sh : 31c
#另外一种调用方式
def city_temp(**param):
for key, value in param.items():
print(key,':',value)
x = {'bj':'32c', 'xm':'23c', 'sh':'31c'} #注意这里的写法!!
city_temp(**x)
可变参数和关键字可变参数可以传入空值
def city_temp(param1,**param):
print(param1)
print(param)
city_temp('xx')
#xx
#{}
9 变量作用域
c = 50
def add(x,y):
c = x + y
print(c)
add(3,4) #7
print(c) #50
我们可以引用函数的外部变量,不能引用函数内部的变量
def demo1():
c = 10
print(c) #运行会报错
c = 50
def demo2():
c = 20
print(c) # 50
#50是全局变量,20是局部变量。当然了,全局和局部是相对而言的
for 循环内部的变量是可以引用的
def demo():
c = 50
for i in range(0,10):
a = 'a'
c += 1
print(c)
print(a)
demo()
#60
#a #打印出了a 说明for内部的变量是可以引用的
看看下面代码的运行结果
c = 1
def func1():
c = 2
def func2():
c = 3
print(c)
func2()
func1() #3
#尝试把c=3 c=2注释掉,看看函数运行的结果
10 作用域链
Python作用域有链式的特性
11 global关键字
def demo():
global c
c = 2
demo()
print(c) #2