函数快速入门

函数基础

函数的作用

    函数主要以功能为导向,减少代码重复,使代码可读性增强.

函数的定义及调用

# 函数的定义
def test(a,b)
    return a + b

# 函数的调用
test(1,2)

定义:

  • def 关键字开头,函数名后面要跟一个(),最后要有 : .
  • 函数名只能包含字符串,下划线,和数字且不能以数字开头.
  • 每个函数都应该对功能和参数进行相应的说明,应该写在代码的下一行.增强代码的可读性.  

函数的返回值

    在函数中可以使用 return 关键字,定义函数的返回值. 函数遇到 return 关键字则不继续执行,如果没有定义返回值则返回 None .

    如果返回多个值,则返回一个元祖.

函数的参数

    函数可以接受参数,具体由函数进行定义.

    实参: 实参即是给函数传递的参数.

    形参: 形参即是函数定义的参数.

实参:

1) 位置参数
def test1(a,b):
    print(a + b)
test(1,2)

2) 关键字参数

def test1(a,b):
    print(a + b)
test(a=1,b=2)

3) 混合参数
    a) 位置参数必须在关键字参数前面.
    b) 对于一个形参只能赋值一次.

def test(a,b,c):
    print(a + b + c)

test(1,b=2,3)

形参:

1) 默认参数
def stu_info(name,sex = "male"):
    print(name,sex)

stu_info('test1')
stu_info('test2','female')

2)  参数陷阱: 默认参数是一个可变的数据类型.
def defult_param(a,l = []):
    l.append(a)
    print(l)

defult_param('test1')
defult_param('test2')

3) 动态参数
    按照位置传递的多余的参数都由 args 统一接收,保存成一个元祖形式.
    
def mysum(*args):
    the_sum = 0
    for i in args:
        the_sum+=i
    return the_sum

the_sum = mysum(1,2,3,4)
print(the_sum)

def stu_info(**kwargs):
    print(kwargs)
    print(kwargs['name'],kwargs['sex'])

stu_info(name = 'test',sex = 'aa')

函数进阶

函数的命名空间和作用域

    代码在运行的开始,创建的存储变量与值的关系的空间叫做全局命名空间,在函数的运行中开辟的空间叫做局部命名空间。

    命名空间的本质就是存放名字与值的绑定关系,

命名空间的分类:

  • 全局命名空间  
  • 局部命名空间  即是 函数中的作用域 或者类中。
  • 内置命名空间 存放的是python 解释器为我们提供的变量。

三种命名空间之间的加载顺序及取值顺序:

  加载顺序: 内置命名空间 ---> 全局命名空间 --> 局部命名空间 (调用时才加载)

  局部调用: 局部命名空间 ---> 全局命名空间  --> 内置命名空间

  全局调用:全局命名空间 --》 内置命名空间。

作用域

  作用域就是作用范围,按照生效范围可以分为局部作用域和全局作用域,

  全局作用域: 包含内置命名空间全局名称空间,在整个文件的任意位置都能被引用。全局有效。

  局部作用域: 局部名称空间,只能在局部范围内生效,

查看方法:

print(globals())
print(locals())

global 关键字

  内置空间可修改全局空间变量值。

a = 10
def func():
    global a
    a = 20

print(a)
func()
print(a)

 nonlocal关键字

  • 外部必须有这个变量
  • 在内部函数声明 nonlocal 变量之前不能出现同名变量。
  • nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量。

闭包

    闭包函数: 内部函数包含对外部作用域而非全局作用域的名字引用,该内部函数称为闭包函数.

    函数内部定义的函数称为内部函数

def func():
    name = 'eva'
    def inner():
        print(name)
    return inner

f = func()
f()

  

 

posted @ 2020-04-14 13:36  闫世成  阅读(448)  评论(0编辑  收藏  举报