001---函数基础
Posted xjmlove
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了001---函数基础相关的知识,希望对你有一定的参考价值。
函数
函数基本定义
- 函数是什么:函数就是功能的封装,将一组语句通过一个函数名封装起来。要学执行这个函数,调用其函数名即可。
- 特性:
- 减少重复代码
- 可扩展性强
- 代码易维护
- 语法定义:
def func():
print('函数的定义')
func() # 调用函数
函数的参数
- 形参:形式定义的参数,只有在函数调用的时候才分配内存单元,只在函数内部有效。函数调用结束则形参失效。
- 实参:实际传入的参数,可以是常量、变量、表达式、函数等、无论是何种类型的值,在进行函数调用的时候必须要有确定的值,实参是要传给形参。
def calc(x,y):
"""
计算两个数的和的函数
:param x:形参 x
:param y:形参 y
"""
res = x + y
return res
print(calc(10, 10)) # 调用函数获取计算结果
位置参数:根据形参,传入的参数一一对应,按照顺序传入,叫做位置参数。
- 默认参数
看以下代码
def students(name, age, sex, classes='Python1期'):
print('学生姓名:{0};年龄:{1};性别:{2};班级:{3}'.format(name, age, sex, classes))
students('江子牙', 21, '男', )
students('江xx', 19, '女', )
students('江yy', 15, '不男不女', )
students('子 牙', 25, '男', )
我们写了重复代码(参数)。有个默认参数可以解决此问题。
def students(name, age, sex, classes='Python1期'):
print('学生姓名:{0};年龄:{1};性别:{2};班级:{3}'.format(name, age, sex, classes))
students('江子牙', 21, '男', )
students('江xx', 19, '女', )
students('江yy', 15, '不男不女', )
students('子 牙', 25, '男', 'Python2期')
没有传值则是默认的值,传入的就会是自己传入的
- 关键字参数
正常情况下,传参数要一一对应,形参也一一对应值。但是如果不想按顺序,就可以是关键字参数。但是,关键字必须放在位置参数后面。
'''
本来传参数要一一对应,按照顺序。如果不想按顺序,就可以指定参数名的参数名
关键字参数必须放在位置参数后面
'''
def stu_info(name,age,course='高三一班'):
print('-----学生信息-----')
print('姓名:',name)
print('年龄:',age)
print('课程:',course)
stu_info(age=199,course='大学啦',name='小天文')
stu_info(age=20,name='文帅')
- 非固定参数:当传入的参数个数不确定的情况下,就可以使用非固定参数,也叫做不定长参数,
# *args 实际上是传一个元祖,打包所有不固定参数.
def send(msg, *args):
print('所有非固定参数', args)
for i in args:
print('我是非固定参数', i)
send('别浪了……', 'a')
send('别浪了……', 'a', 'b')
send('别浪了……', 'a', 'b', 'c')
send('别浪了……', ['a', 'b', 'c'])
# 当你想以列表形式,元素作为一个个参数传入时,应该加*
send('别浪了……', *['a', 'b', 'c'])
# 接收的参数是关键字参数,实际上是传一个字典。
def info(name, age, **kwargs):
print(kwargs)
info('111', 222, sex='男', money=9.9)
info('111', 222, **{'sex': '变态', 'money': 100})
返回值
- return:函数外部的代码想要获取函数内部执行的结果,就用return把结果返回。
- return:代表函数的执行结束,并返回结果,如果函数没有指定return。返回值默认为None
def calc(x, y):
"""
计算两个数的和的函数
:param x:形参 x
:param y:形参 y
"""
res = x + y
return res
print('函数执行的结果:',calc(10, 10))
全局和局部变量
- 在函数内部定义的变量成为局部变量,在程序一开始定义的变量称为全局变量。
- 全局变量的作用域是整个程序,局部变量的作用域是定义该变量的函数。
- 当全局变量和局部变量重名时,在函数内,局部变量优先,在其余地方,全局变量优先。
name = 'Black girl' # 全局变量
def change_name():
name = '黑色姑娘' # 局部变量,定义在函数里面的变量,函数一旦执行完毕,则释放局部变量,如果里面没有定义,则使用外面的,
print(name) # 黑色姑娘--->如果加global,就可以使用全局变量
change_name()
print(name) # Black girl 修改局部变量并不影响全局变量的值,作用域不一样。
age = 18
def func1():
age = 73
print('alex')
def func2():
print('egon')
print(age)
return func2
res = func1()
res()
print(age)
嵌套函数
- 在函数内部再定义一个函数
age = 19
def f1():
def f2():
print(age)
age = 73
f2() # 调用内部函数
f1()
print(age)
# 函数内部可以再次定义函数,执行需要被调用。age是一层一层往上找。
匿名函数
- 没有函数名、也没有代码块。
- 一行代码,没有名字 lambda
- 主要用于和一些函数搭配使用:内置的map()、filter()、reduce()、...
- 节省代码量
res = map(lambda x,y:x+y,[1,2,3])
高阶函数(满足其一就是高阶函数)
- 函数可以接收一个函数作为参数传入
- 函数的返回值是一个函数
以上是关于001---函数基础的主要内容,如果未能解决你的问题,请参考以下文章