函数定义

---恢复内容开始---


def 函数名称():

    函数体

    return 返回值

函数名称() //调用函数

colse  释放内存

 

返回值:

一:无返回值

def ru_nane():
    return 3
ru_nane()

 

  里面有return 但是没有返回值。

2.单个返回值,多个返回值

def ru_nane():
    return 3
print(ru_nane())

 

  1. 直接打印,只是打印的时候会显示return里面的返回值,

 

def ru_nane():
    return 3
v=ru_nane()
print(v)

 2. 这样才是实际有返回值,因为要有一个参数去接收函数的返回值,

 

def ru_nane():
    return 3,4,5
v=ru_nane()
print(v)

 

3.这样是返回多个返回值,可以用一个参数去接收,返回的是一个元祖

二:参数
    1.形参

     就是定义函数的时候括号里面的穿的参数,形参就是相当于没有实际的参数,软件没有实际给出内存来存储的参数

    2.实参

     就是实际传的参数,在内存中实际有的

 

   例子:

def ru_nan(a, b):  ---形参
    return a+b
v = ru_nan(2, 3)  ----实参
print(v)

 

二:函数命名空间和作用域

      命名空间:

      1)内置命名空间:-----python解释器

      #就是python一启动的时候就可以使用的名字储存在内置空间

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

      2) 全局命名空间-------自己写的代码。不是函数中的代码

      #程序依次向下执行的时候被执行的过程储存在内存中

      #放置的是我们定义的函数和变量

      局部命名空间:---------函数

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

      #当调用这个函数的时候被加载到内存,函数执行结束后,内存也随之消失

     #在局部:可以使用全局、内置命名空间中的名字

     #在全局:可以使用内置命名空间中的名字,但是不能用局部中使用
    #在内置:不能使用局部和全局的名字的

 

   作用域

  作用域两种

# 全局作用域 —— 作用在全局 —— 内置和全局名字空间中的名字都属于全局作用域 ——globals()

1 a = 1
2 def funck()
3    globals a
4     a +=1
5 funck()
6 print(a)

# 局部作用域 —— 作用在局部 —— 函数(局部名字空间中的名字属于局部作用域) ——locals()

a = 1
 b = 2
 def func():
     x = 'aaa'
     y = 'bbb'
     print(locals())
    print(globals())

 func()
 print(globals())
 print(locals()) #本地的

#globals 永远打印全局的名字
#locals 输出什么 根据locals所在的位置

 

三:函数的嵌套和作用域链

   函数嵌套 

def max(a,b):
    return a if a>b else b
 def the_max(x,y,z):  #函数的嵌套调用
     c = max(x,y)
     return max(c,z)

 print(the_max(1,2,3))

#函数的嵌套定义
#内部函数可以使用外部函数的变量

a = 1
def outer():
    a = 1
   def inner():
         a = 2
         def inner2():
           nonlocal a  #声明了一个上面第一层局部变量
           a += 1   #不可变数据类型的修改
          inner2()
        print('##a## : ', a)
    inner()
     print('**a** : ',a)

outer()
print('全局 :',a)

#nonlocal 只能用于局部变量 找上层中离当前函数最近一层的局部变量
#声明了nonlocal的内部函数的变量修改会影响到 离当前函数最近一层的局部变量
# 对全局无效
# 对局部 也只是对 最近的 一层 有影响

 def func():
     print(123)

  func()  #函数名就是内存地址
 func2 = func  #函数名可以赋值
 func2()

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

def wahaha(f):
    f()
    return f           #函数名可以作为函数的返回值

qqxing = wahaha(func)   # 函数名可以作为函数的参数
qqxing()

 

四:闭包

 闭包:嵌套函数,内部函数调用外部函数的变量

 

# def outer():
#     a = 1
#     def inner():
#         print(a) 调用了a
#     inner()
# outer()

 

 

def outer():
    a = 1
    def inner():
        print(a)
    return inner 因为函数也可以作为返回值
inn = outer() 那么用inn来接受inner的地址,所有后面可以每次去调用这个返回值
inn()

 

 

# import urllib  #模块
from urllib.request import urlopen  ----------专门调用网址的一个文件包
# ret = urlopen('http://www.xiaohua100.cn/index.html').read()
# print(ret)
# def get_url():
#     url = 'http://www.xiaohua100.cn/index.html'
#     ret = urlopen(url).read()
#     print(ret)
#
# get_url()
def get_url():
    url = 'http://www.xiaohua100.cn/index.html'
    def get():
        ret = urlopen(url).read()
        print(ret)
    return get

get_func = get_url()
get_func()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

---恢复内容结束---

posted @ 2018-09-29 14:21  明朗学习之路  阅读(131)  评论(0编辑  收藏  举报