函数是什么
函数是组织好的、可以重复使用的、用来实现单一功能的代码
在先前课堂中我们已经接触过Python的内置函数,例如实现打印功能的print()函数
print()是设定好可以直接使用(组织好的),打印什么参数都可以(重复使用),而print()函数能实现的单一功能就是打印。
定义和调用函数
定义函数
实例
# 函数名:最好是取体现函数功能的名字,一般用小写字母和但下划线、数字组合
def greet(name):
# 参数:根据函数功能,括号里可以有多个参数,也可以不带参数,命名鬼册与函数名相同
# 规范:括号是英文括号,后面的冒号不能丢
print(name+'早上好')
# 函数体:函数体就是体现函数功能的语句,要缩进,一般是四个空格
return
运行实例,会发现终端是空白。那是因为我们只定义了函数
注:
def的意思是定义(define)
greet是函数名(自己取的)
name是参数
def下一行开始缩进的代码是函数体
函数内部一旦遇到return语句,就会停止执行并返回结果
调用函数
调用函数就是输入函数名和参数对应的值
实例
def greet(name):
print(name+'早上好')
return
greet('one') # 调用函数,参数one
greet('Python') # 调用函数,参数Python
输出结果
one早上好
Python早上好
参数可以是多个,或者没有的情况
def greet1():
print('早上好')
def greet2(name, day):
print(name+day+'早上好')
greet1()
greet2('one','星期一')
输出结果
早上好
one星期一早上好
函数重要概念
参数类型
参数类型有:位置参数、默认参数、不定长参数
我们通过一个案列把这些参数串起来
实例
# 位置参数
def introduce(name, age):
print('名字:' + name)
print('年龄:' + age)
introduce('one', '18') # '18'是字符串,如果用整型18作为参数会报错
输出结果
名字:one
年龄:18
注:'小数先生'和“18’是对应参数nama和age的位置顺序传递的,所以叫做位置参数
这个函数用了一段时间感觉信息不过全面,想给每个人添加所在城市。假设目前大多数人都是在行数,这时就可以用到默认参数。
实例
# 默认参数
def introduce(name, age, city='杭州'):
print('名字:' + name)
print('年龄:' + age)
print('城市:' + city)
introduce('one', '18')
输出结果
名字:one
年龄:18
城市:杭州
注:一个参数的值是相对固定的,那么设置默认参数就免去了每次都要传递的麻烦。
默认参数是可以被改变的
实例
def introduce(name, age, city='杭州'):
print('名字:' + name)
print('年龄:' + age)
print('城市:' + city)
introduce('one', '18', '东海')
输出结果
名字:小数先生
年龄:18
城市:东海
又过了一段时间,感觉信息还是不够全面,想加上个人爱好,不过每个人兴趣爱好(数量)都不同,这时就可以用到不定长参数。
格式:一个星号 * 加上个参数名
实例
def introduce(name, age, *hobby, city='杭州'):
print('名字:' + name)
print('年龄:' + age)
print('城市:' + city)
for i in hobby:
print('爱好:' + i)
introduce('one', '18', 'Python', 'piece')
输出结果
名字:one
年龄:18
城市:杭州
爱好python
爱好piece
注:默认参数要放在不定参数(*hobby)的后面
return语句
return是返回值,当输入参数给函数,函数就会返回一个值给你
实例
name = 'one'
print(len(one))
输出结果
3
注:当把参数name放进len()函数中,返回来的是4这个值(字符串的长度),然后用print函数打印出来
自定义函数,可以用return语句规定该函数要返回什么值
实例
def greet(age):
if age < 12:
return '祖国的花朵'
elif age < 25:
return '小鲜肉'
else:
return '我想在活500年'
print(greet(18)
输出结果
小鲜肉
注:return只是将指定数据返回,但不会打印,是由print()函数打印出来的
return特征
a.如果不是立即要对函数返回值做操作,那么可以使用return语句保留返回值
实例
def face(name):
return name + '的脸蛋'
def body(name):
return name + '的身材'
print('我的梦中情人:' + face('李若彤') + '+' + body('林志玲')
输出结果
我的梦中情人:李若彤的脸蛋+林志玲的身材
b.需要多次调用函数时,可以在定义一个注函数main(),调用非主函数的返回值
实例
def face(name):
return name + '的脸蛋'
def body(name):
return name + '的身材'
def main(dream_face, dream_body):
return '我的梦中情人:' + face(dream_face) + '+' + body(dream_body)
print(main('李若彤', '林志玲'))
输出结果
我的梦中情人:李若彤的脸蛋+林志玲的身材
运行过程
c.Python的函数返回值可以是多个,多个返回值的数据类型是元组(tuple)
实例
def lover(name1, name2):
face = name1 + '的脸蛋'
body = name2 + '的身材'
return face, body
a = lover('李若彤', '林志玲')
print(a)
输出结果
('李若彤的脸蛋', '林志玲的身材')
d.没有return语句的函数会默认返回None值。
实例
# 第一个函数
def fun():
a = 'I am coding'
print(fun())
# 第二个函数
def fun():
a = 'I am coding'
return a
print(fun())
输出结果
None
I am coding
e.一旦函数内部遇到return语句,就会停止执行并返回结果
实例
def func():
return 'Moring'
return 'None'
print(func())
输出结果
Moring
变量作用域
a.在一个函数内定义的变量仅能在函数内部使用(局部作用域),被称为局部变量
b.在所有函数之外的赋值的变量,可以在程序的任何位置使用(全局作用域),称作全局变量
实例
x = 99 # 全局变量x
def num():
x = 99 # 局部变量x
print(x)
num()
# 打印局部变量x
print(x)
# 打印全局变量x
输出结果
88
99
注:虽然变量的名字相同(x),但因为全部变量和局部变量处在不同的作用域,所以互不干扰,建议局部变量和全局便两个不要取相同的名字
函数内:局部作用域
函数外:全局作用域
全局作用域的代码中不能使用任何局部变量
实例
def egg():
quantity = 108
egg()
print(quantity)
注:输出结果会报错,变量quantity没有被定义
作者:one