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

【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***

相关文章:

  • 衡量大模型的各个标准/数据集
  • Error: The project seems to require pnpm but it‘s not installed.
  • Linux 安全与存储管理指南
  • python高级学习Day1
  • pyhton中 字典 元组 列表 集合之间的互相转换
  • 数据结构-ArrayList
  • Qt开发中的常见问题与解决方案
  • 模块二 单元4 安装AD+DC
  • priority_queue类的使用及介绍、模拟实现
  • sql server数据迁移,springboot搭建开发环境遇到的问题及解决方案
  • 20250319在荣品的PRO-RK3566开发板的buildroot系统下使用1080p的USB摄像头出图
  • Django 中@login_required 配置详解
  • 《Keras 3 : 开发人员指南 / 函数式 API》
  • 股票量化交易开发 Yfinance
  • Orbslam V3使用Kalibr标定参数详解(D435i)
  • opencascade 源码学习 XmlDrivers-XmlDrivers
  • MyBatis面试常见问题
  • Post-Training Quantization, PTQ
  • 深入探索JVM字节码增强技术与调优实践
  • 基于Python+Django的二手房信息管理系统
  • 聚焦各领域顶尖工匠,《上海工匠》第十季于五一播出
  • 人民日报:在大有可为的时代大有作为
  • 浦发银行一季度净利175.98亿增1.02%,不良率微降
  • 太好玩了!坐进大卫·霍克尼的敞篷车穿越他画笔下的四季
  • 美国“杜鲁门”号航母一战机坠海
  • 俄乌战火不熄,特朗普在梵蒂冈与泽连斯基会晤后口风突变