当前位置: 首页 > article >正文

【Python】12、函数-02

文章目录

    • 1. 返回值
    • 2.文档字符串
    • 3. 作用域
    • 4. 命名空间

1. 返回值

返回值就是函数执行以后返回的结果,可以通过return来指定函数的返回值。返回值可以通过变量接收返回值

  • return 后可以返回任意的对象,甚至是一个函数
  • 如果仅写一个return或者不写return,则相当于return None
  • 函数中return后的代码都不会执行
def fn() : 
    return 123;

res = fn()
print('res = ',res)

# 结果:
res =  123

***Repl Closed***

2.文档字符串

help()是Python中的内置函数,通过help()函数可以查询Python中的函数用法
语法:help(函数对象)


help(print)

# 结果:
Help on built-in function print in module builtins:

print(*args, sep=' ', end='\n', file=None, flush=False)
    Prints the values to a stream, or to sys.stdout by default.

    sep
      string inserted between values, default a space.
    end
      string appended after the last value, default a newline.
    file
      a file-like object (stream); defaults to the current sys.stdout.
    flush
      whether to forcibly flush the stream.


***Repl Closed***

  • 文档字符串(doc str)
    在定义函数时,可以在函数内部编写文档字符串,文档字符串就是函数的说明,编写的文档字符串可以通过help()函数进行查看

定义方法:在函数的第一行写一个字符串就是文档字符串,一般使用双重引号进行跨行描述。

def fn(a,b,c) : 
    '''
    这是一个求和方法,将传入的a,b,c三个数进行求和
    '''
    return a+b+c;

help(fn)

# 结果:
Help on function fn in module __main__:

fn(a, b, c)
    这是一个求和方法,将传入的a,b,c三个数进行求和

***Repl Closed***

3. 作用域

作用域(scope)指的是变量的生效区域,在Python中共有两种作用域:

  • 全局作用域
    全局作用域在程序执行时创建,在程序执行结束时销毁;
    所有函数以外的区域都是全局作用域;
    全局作用域中定义的变量,都属于全局变量,全局变量可以在程序任意位置访问到

  • 函数作用域
    函数作用域在函数调用时创建,在调用结束时销毁;
    函数每调用一次就会产生一个新的函数作用域;
    在函数作用域中定义的变量,都是局部变量,只能在函数内部被访问

  • 变量的查找
    当使用变量时,会优先在当前作用域中寻找该变量,如果有则使用,如果没有则往上级作用域寻找,直到找到为止,如果最终全局作用域没有找到则报错


a = 123

def fn() : 
    b = 10
    print('a = ',a)
    print('b = ',b)

fn()

# 结果:
a =  123
b =  10

***Repl Closed***


a = 123

def fn() : 
    b = 10
    print('a = ',a)


fn()
print('b = ',b)

# 结果:
a =  123
Traceback (most recent call last):
  File "C:\Users\Administrator\AppData\Roaming\Sublime Text\Packages\User\函数.py", line 18, in <module>
    print('b = ',b)
                 ^
NameError: name 'b' is not defined

***Repl Closed***


在函数中为变量赋值时,默认都是为局部变量赋值,如果希望在函数内部修改全局变量,则需要使用global关键字来声明变量


a = 123

def fn() : 
    a = 456
    print('内部a = ',a)
    
fn()
print('外部a = ',a)

# 结果:
内部a =  456
外部a =  123

***Repl Closed***


a = 123

def fn() : 
    global a
    a = 456
    print('内部a = ',a)
    
fn()
print('外部a = ',a)

# 结果:
内部a =  456
外部a =  456

***Repl Closed***

4. 命名空间

命名空间(namespace)指的是变量存储的位置,每一个变量都需要存储到指定的命名空间中。
每一个作用域都会有一个对应的命名空间。全局命名空间,用来保存全局变量,函数命名空间用来保存函数中的变量。命名空间实际上是个字典,专门用来存储变量的字典

  • locals() 用来获取当前作用域的命名空间
    如果在全局作用域中调用locals() 返回全局命名空间,如果在函数作用域中调用locals()则获取函数命名空间,返回的是一个字典
a = 123

scope = locals()

print(type(scope))
print(a)
print(scope['a'])

# 结果
<class 'dict'>
123
123

***Repl Closed***



scope = locals()

scope['c'] = 456 # 一般不建议这样操作

print(c)
print(scope['c'])
# 结果
456
456

***Repl Closed***


  • 函数内部的命名空间
def fn() : 
    scope = locals()
    print(scope)

fn()

# 结果:
{}

***Repl Closed***

  • global() 函数可以获取到全局的命名空间
def fn() : 
    globals_scope = globals()
    print(globals_scope)

fn()

# 结果
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000028EC9419CD0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'C:\\Users\\Administrator\\AppData\\Roaming\\Sublime Text\\Packages\\User\\函数.py', '__cached__': None, 'fn': <function fn at 0x0000028EC97FF240>}

***Repl Closed***


http://www.kler.cn/a/592200.html

相关文章:

  • 告别传统直播单一性,智享三代 AI 无人直播开启定制时代
  • 2025-gazebo配置on vmware,wsl
  • android MutableLiveData setValue 响应速速 postValue 快
  • 网络爬虫【爬虫库urllib】
  • 织梦DedeCMS优化文章模版里的“顶一下”与“踩一下”样式
  • VulnHub-matrix-breakout-2-morpheus通关攻略
  • 启幕数据结构算法雅航新章,穿梭C++梦幻领域的探索之旅——二叉树序列构造探秘——堆的奥义与实现诗篇
  • redis缓存更新策略
  • Superagent 异步请求:如何处理复杂的 HTTP 场景
  • C#中修饰符——abstract、virtual
  • 领略算法真谛:01背包问题
  • 深入理解 Linux ALSA 音频架构:从入门到驱动开发
  • LeetCode算法题(Go语言实现)_05
  • Linux--内核进程O(1)调度队列
  • HTML 图像与多媒体元素:拓展学习边界的进度记录(一)
  • LinkedList 底层源码深度解析
  • 【蓝桥杯每日一题】3.17
  • 基于springboot的房屋租赁系统(008)
  • Mysql相关知识:存储引擎、sql执行流程、索引失效
  • AI 大模型统一集成|微服务 + 认证中心:如何保障大模型 API 的安全调用!