python

一、函数定义:

  • def:表示函数的关键字

  • 函数名:函数的名称,日后根据函数名调用函数

  • 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...

  • 参数:为函数体提供数据

  • 返回值:当函数执行完毕后,可以给调用者返回数据。

二、函数结构

def 函数名():
... 函数体
...

例如:

#输出字符串长度
s ='adaijdia' def my_len(s): i = 0 for k in s: i+=1 return i a = my_len(s)#8 print(a)

 三、返回值(return)的三种情况

  1.没有返回值---返回None

        #不写return

        #只写return:结束一个函数的继续

        #return None  

  2.返回一个值:

        #可以返回任何数据类型

        #只要返回就可以接受到

        #如果在一个程序中有多个return,那么只执行第一个

  3、返回多个值:

        #用多个变量接受:有多少返回值就用多少变量接收

        #用一个变量接收:得到的是一个元祖

四、参数

4.1、参数定义

  1.形参:

  #写在函数声明的位置的变量叫形参,形式上的一个完整.表示这个函数需要xxx

  2.实参:

  #在函数调用的时候给函数传递的值.加实参,实际执行的时候给函数传递的信息.表示给函数xxx

 函数的传参就是函数将实际参数交给形式参数的过程.

#输出字符串长度
s ='adaijdia'
def my_len(s):  #接收参数,形式参数,形参
    i = 0
    for k in s:
        i+=1
    return i
a = my_len(s)  #传递参数:传参,实际参数,实参
print(a)#8

 4.2、站在实参的角度上,传参数

   1.按位置传参数

   2.按关键字传参数

   3.混合传参(必须先按位置传参,再按关键字传参数!

#站在实参的角度上,传参数
def s(a,b):
    result = a-b
    return result
s1 = s(2,3)#按位置传参数
s2 = s(b = 3,a = 2)#按关键字传参数
s3 = s(2,b = 3)#混合传参(必须先按位置传参,再按关键字传参数!)
print(s1,s2,s3)#-1 -1 -1

 4.3、站在行参的角度上,传参数

   1.位置参数:必须传,有几个参数就传几个值

   2.默认参数:可以不传,如果不传就是默认的参数,如果传了就用传的

#站在行参的角度上,传参数
def classmate(name,index=''):
    print('{}:{}'.format(name,index))
classmate('wws')#wws:男
classmate('db','')#db:女

五、命名空间

5.1内置命名空间  ——— python解释器

       #就是pytho解释器一启动就可以使用的名字存储在内置命名空间里

       #内置的名字在启动解释器的时候被加载进内存里

5.2 全局命名空间 —— 我们写的代码但不是函数中的代码

        #是在程序从上到下被执行的过程中一次加载进内存的

        #放置了我们设置的所有变量名和函数名

5.3 局部命名空间  —— 函数

       #就是函数内部定义的名字

       #当调用函数的时候 才会产生这个命名空间 随着函数执行的结束 这个命名空间就消失了

六、作用域

6.1 分类:

1.全局作用域  ——作用在全局  —— 内置和全局名字空间中的名字都属于全局作用域    ——globals()   #永远打印全局的名字

2.局部作用域 —— 作用在局部 —— 函数(局部名字空间中的名字属于局部作用域)  ——locals()   #输出什么 根据locals所在位置

6.2  注意点

1.对于不可变数据类型 在局部可是查看全局作用域中的变量

2.但是不能直接修改

3.如果想要修改,需要在程序的一开始添加global声明

七、nonlocal:声明一个上面第一层局部变量

i = 1
def s():
    i = 1
    def s1():
        i = 2
        def s2():
            nonlocal i
            i+=2
            print('s2:',i)# s2: 4
        s2()
    s1()
s()
print('s:',i)  #  s: 1

 八、函数名

8.1 函数名可以赋值

#函数名可以赋值
def func():
    print('123')
func1 = func
func1()  #123

8.2 函数名作为容器类型的元素

#函数名作为容器类型的元素
def func():
    print('123')
func1 = func
l = [func1,func]
for i in l:
    i()
# 123
# 123

8.3函数名可以作为函数的参数

#函数名可以作为函数的参数
def func():
    print('123')
def func2(s):
    return s
conturn = func2(func)
conturn()#123

 九、闭包

1.闭包是嵌套在函数中的函数。
2. 闭包必须是内层函数对外层函数的变量(非全局变量)的引用。

# 闭包

def outer():
    i = 1
    def inter():
        print(i)
    return  inter
s = outer()
s()# 1
原文地址:https://www.cnblogs.com/2584808136-qq-com/p/12872513.html