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])

高阶函数(满足其一就是高阶函数)

  • 函数可以接收一个函数作为参数传入
  • 函数的返回值是一个函数

猜你喜欢

转载自www.cnblogs.com/xjmlove/p/10331272.html