首页 > 编程语言 >python - 函数

python - 函数

时间:2024-12-02 10:00:54浏览次数:4  
标签:return 函数 python global add print def

标准写法

定义一个函数,函数名叫 summary(),

  • 函数有两个参数:a 和 b,a 的默认值为 1 ,b 的默认值为 2;
  • :int 指定参数为 int 类型(注解);
  • -> int 指定返回值为 int(注解);
  • r""" """是标准的函数注释;
  • 要是空函数,还没想好功能,用 pass 进行占位
def summary(a: int = 1, b: int = 2) -> int:
    r"""
    加法运算
    :param a: 加数
    :param b: 加数
    :return: 和
    """

    return a + b
    pass


print(summary(1))

注意:注解只是起到提示作用,即便代码出现很明显的类型错误,也是可以执行的;

比如下面这行代码,给了个字符串参数,代码只是会出现警告,但是可以执行。

print(summary('1'))

注解的作用:除了代码警告之外,对于后期的代码分析,也会更加友好一些。

# 打印一个函数的参数类型和返回值类型
print(add.__annotations__) 

可变参数

允许是任意多个参数(0-n),参数传至函数内部的时候,数据被装到元组中。

def summary(*arr):
    # arr 是一个元组
    print(sum(arr))


print(summary(1,2,3))

关键参数

与可变参数类似。

允许是任意多个参数(0-n),参数传至函数内部的时候,数据被装到字典中。

def summary(**arr):
    # arr 是一个字典
    print(arr)


print(summary(a=1,b=2,c=3))

递归

def factorial(n):
    return 1 if n <= 1 else n*factorial(n-1)
    pass


print(factorial(3))

print('hello world!!')

变量作用域

跟 java 一致,优先使用离自己最近的变量,先使用局部的变量,再使用全局的。

# 有个全局的变量 a = 3
a = 3


def m1(a):
    # 优先使用参数 a
    print(a)
    pass


def m2():
	# 这个函数内部没有参数 a,所有要使用全局的变量
    print(a)
    pass

m1(6)
m2()

global关键字

写一段奇怪的代码,猜一猜输出 a 的结果是啥?

a = 3


def add():
    a = 2


add()

print(a)

为什么说这段代码很奇怪?

python 是没有字段声明的,因此 a = 2 有两种可能性:

  • 可能 a 已经有值,重新赋值成了 2;
  • 也有可能是,重新声明了一个 a,令其值为 2。

上述代码的输出结果是 3,add()函数内部,又声明了一个局部变量 a。
如果希望 add() 函数对 a 重新赋值,则需要用到 global 关键字。

global用法

  1. 引用父级作用域的变量,比如:下面代码中的 a;
  2. 声明一个全局变量,比如:下面代码中的 b;
  3. 逐层向上查找,父级没有,就找父级的父级;
a = 3


def add():
    global a
    a += 2
    global b
    b = None


add()

print(a)
print(b)

闭包(函数嵌套)

闭包和面向对象,概念存在一定的重合,暂时没有其它特别妙的应用场景;

可能在 lambda 表达式上,或者封装特别复杂的函数,会有一些妙用。

案例

def math(x, o, y):
    def add(a, b):
        return a + b

    def sub(a, b):
        return a + b

    operator = {'add': add, 'sub': sub}
    return operator.get(o)(x, y)


print(math(1, 'add', 2))

nonlocal的用法

已知闭包就是一个函数,使用 global 时,会产生一种代码歧义,比如下面这个代码,

只给你看一部分,我们看不出 global 引用的变量,是闭包外的,还是闭包内(闭包外的)。

def counter(x):

    def add(b):
        global ret
        ret += b
        return ret

    return add

nonlocal 主要用于闭包和嵌套函数中,重新绑定局部作用域以外的变量‌。

逐层向上寻找变量,父级函数没有,就找父级的父级;但是不包含全局的,全局的仍然使用 global。

def counter(x):
    ret = x

    def add(b):
        nonlocal ret
        ret += b
        return ret

    return add


print(counter(3)(4))

标签:return,函数,python,global,add,print,def
From: https://www.cnblogs.com/chenss15060100790/p/18581072

相关文章

  • 【Python TensorFlow】进阶指南(续篇五)
    在之前的文章中,我们深入探讨了TensorFlow的高级功能,包括模型优化、异步训练、在线学习、模型服务化、安全与隐私保护、模型版本控制、模型监控、模型压缩与量化、迁移学习、动态调整与自适应训练策略、增强学习与深度强化学习,以及最新硬件加速器的应用等。本文将继续探索更......
  • python 类和对象
    python类和对象1.什么是类2.什么是对象3.面向对象的三大特征3.1封装3.2继承3.3多态4.总结类和对象是面向对象编程的核心概念,而面向对象是我们python编程中的一个重要编程方法,本篇文章将带你初识类和对象。1.什么是类类是一种用于创建对象的蓝图或模板。它定义了......
  • Kali Linux怎么开python虚拟环境
    相信很多朋友再学习的过程中都会遇到一些pip失效,或者报错的时候,他们要求我们要使用虚拟环境,但是不知道怎么搭建,下面这篇文章就来告诉你如何搭建虚拟环境,这个方法在所有Linux的服务器都通用,就两行命令安装venv模块(Python3.3及以上版本自带,无需安装)python3-mvenvmyenv......
  • D85【python 接口自动化学习】- pytest基础用法
    day85pytest指定目录或文件执行测试用例学习日期:20241201学习目标:pytest基础用法--pytest指定目录,文件执行测试用例学习笔记:pytest指定目录或文件执行测试用例终端执行用例pytest不跟目标目录或文件,执行根目录下所有符合规则的测试用例终端执行用例pytest指定......
  • python基础学习6和7
    模块类与对象模块内置模块time,random,os,json第三方模块requests,pandas,numpy,....自定义模块xxx.py常见的内置模块hashlib模块该模块主要是进行数据加密的作用。常见的加密方式:sha256()【可逆】md5()【不可逆】importhashlibinfo='123456'#......
  • [Python学习笔记4]——函数
    目录 1.函数的定义2.传递实参2.1位置实参2.2关键字实参2.3给形参指定默认值3.返回值3.1返回简单值3.2将形参的默认值指定为空字符串以实现实参可选3.3返回字典或列表4.传递列表4.1向函数传递列表4.2在函数中修改列表4.3禁止函数修改列表(使用列表切......
  • Python.task4
    Python.task4定义*函数使用关键字def,后跟函数名与括号内的形参列表。*函数内容以冒号起始,并且缩进。*return[表达式]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None。调用参数默认参数为参数指定默认值是非常有用的方式。调用函数时,可以使用......
  • 大数据学习记录,Python基础(3)
    算术运算符```pythona=3b=4print(a+b)#7print(a-b)#-1print(a*b)#12print(a/b)#0.75print(a%b)#3print(a**b)#81print(a//b)#0整除比较(关系)运算符注意:=是赋值运算符,==是比较运算符比较运算符的结果一定是bool类型的扩......
  • Shell编程 - 函数篇
    1.概述把一堆代码,起个名字。对脚本中重复使用到的代码,设置函数,精简脚本的内容。让脚本更加的规范。应用场景:在书写脚本的时候,尽量使用函数,规范脚本。让脚本的开发,更加模块化。方便后期调试,调试的时候只需要注释函数即可。2.格式#定义方式01最完整functions......
  • MATLAB中listdlg函数用法
    目录语法说明示例显示颜色列表用于进行多选显示当前文件夹文件用于进行单选        listdlg函数的功是创建列表选择对话框。语法[indx,tf]=listdlg('ListString',list)[indx,tf]=listdlg('ListString',list,Name,Value)说明[indx,tf]=listdlg('List......