python函数基础2

一、匿名函数

1. 匿名函数

python中除了用def关键字来声明函数之外,还有用lambda声明函数,这样的函数叫做匿名函数。

2. 简单函数转为匿名函数

匿名函数语法: lambda 参数:表达式

# 0参数
# 简单函数可以用匿名函数
def test():
    return "hello world"

a = test()
print(a)     # hello world

# 匿名函数语法:  lambda 参数:表达式
test = lambda: "hello world"
b = test()
print(b)    # hello world
# 传入参数
def test2(num1, num2):
    return num1+num2

res = test2(1, 2)
print(res)     # 3

# 匿名函数
test2 = lambda num1, num2: num1+num2res = test2(1, 2)print(res)  # 3

3.过滤器与匿名函数的结合

# 过滤器filter(func, 可迭代对象)
li = [12, 63, 78, 90, 2, 45, 23]
def test3(x):
    return x > 50

res = filter(test3, li)
print(res)    # <filter object at 0x000001E992A45348>
print(list(res))  # [63, 78, 90]

# 转成匿名函数
res = filter(lambda x: x > 50, li)
print(res)       # <filter object at 0x000002DA4CE25588>
print(list(res))  # [63, 78, 90]

4.匿名函数作为参数传入函数中的使用

当我们做一个简单的运算的时候,可以直接用匿名函数

test = lambda num1, num2: num2 + num1

print(test(1, 2))     # 3

虽然这个函数可以达到运算加法的目的,但是有缺点:适应性不强,只能做到加法的运算

我们可以通过一步步改造完善这个运算,可以做个简单的计算器

def test4(a, b, func):
    res = func(a, b)
    return res

# 将lambda匿名函数作为参数传入,较之前灵活了,适应性加强了
num = test4(4, 5, lambda a, b: a * b)
print(num)     # 20

当我们把匿名函数作为参数,传入到函数的调用的时候,可以通过改变参数func,进行加减乘除的运算,但是这样传入的参数实用性还是不是很强,将func用input,那么就更加方便了

# 实现匿名函数的输入,这样更加灵活了,且适应性更强了
func = input("请输入一个匿名函数:")
func = eval(func)
def test4(a, b, func):
    res = func(a, b)
    return res

res4 = test4(23, 87, func)
print(res4)   

以上这段代码实用性更加强了,但是还是存在缺陷,run一次只能计算一次,没办法连续使用,这样我们用死循环就可以解决这个问题

while True:
    flag = input("退出请按[y/q]:")
    if flag != "q" and flag != "y":
        func = eval(input("请输入一个匿名函数:"))
        num1 = int(input("请输入num1:"))
        num2 = int(input("请输入num2:"))
        def test5(num1, num2, func):
            return func(num1, num2)

        res = test4(num1, num2, func)
        print(res)
    else:
        break

二、函数的作用域

1.定义的变量所能作用的范围

2. 全局变量  函数外部定义的变量是全局变量

a = "hello world"    # 全局变量
def test():
    a = "hello"      # 局部变量
    print("1:", a)

print("2:", a)      # 2: hello world
test()        # 1: hello  1在2后面是因为,test函数是在2后面调用的
print("3:", a)      # 3: hello world
# 在函数外部定义的变量

在函数内部定义全局变量 global

a = "hello world"    # 全局变量
def test():
    global a
    a = "hello"      # 局部变量
    print("1:", a)

print("2:", a)      # 2: hello world
test()        # 1: hello
print("3:", a)      # 3: hello

3. 局部变量  在函数内部定义的变量

由上例子我们可以知道,局部变量是不能作用到函数外面的

4. nonlocal

这个用在函数嵌套函数中

# nonlocal

1   def test_out():
2     str1 = "hello hello"

3     def test_in():
4         str1 = "hello"
5         str1 += " world"
6         print("1:", str1)     # 1: hello world

7     test_in()
8     print("2:", str1)     # 2: hello hello

  test_out()

当test_out()函数被调用的时候,函数从上到下执行,当执行了第7行代码的时候,test_in函数被调用,执行到了第6行代码的时候,就print了“hello world”,再执行第8行代码的时候,打印了hello hello,相对与str1 = "hello"来书,str2 = "hello hello"变量作用范围更广,而后者相对与前者是一个局部变量,所以函数test_in不被外面调用

如果我们想要在内层函数调用外层函数,我们需要用到nonlocal

def test_out():
    str1 = "hello hello"

    def test_in():
        # str1 = "hello"
        nonlocal str1
        str1 += " world"
        print("1:", str1)     # 1: hello hello world

    test_in()
    print("2:", str1)     # 2: hello hello world

test_out()

总结:

1. 函数内部定义的为局部变量,其作用域是局部作用域,函数外无法调用的

2.函数外定义的为全局变量,其作用域是全局作用域,如果在函数内想要进行修改,需要global

3.外层函数的变量,如果想要在内层进行修改,需要nonlocal

原文地址:https://www.cnblogs.com/zgzeng/p/12141906.html

时间: 2024-10-17 03:28:12

python函数基础2的相关文章

10分钟学会 Python 函数基础知识

一.函数基础 简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运行.Python中的函数在其他语言中也叫做过程或子例程,那么这些被包装起来的语句通过一个函数名称来调用. 有了函数,我们可以在很大程度上减少复制及粘贴代码的次数了(相信很多人在刚开始时都有这样的体验).我们可以把相同的代码可以提炼出来做成一个函数,在需要的地方只需要调用即可.那么,这样就提高了代码的复用率了,整体代码看起来比较简练,没有那么臃肿了. 函数在Python中是最基本的程序结构,用来最大化地

python函数基础学习

函数的定义与调用: def 函数名(参数1,参数2): '''函数注释''' print('函数体') return 返回值 定  义:def关键字开关,空格之后接函数名和圆括号,最后冒号结尾 def 是固定且不可变的 函数名:函数名是包含字母.数字.下划线的任意组合,(不能以数字开头) 函数调用: 返回值 = 函数名 (参数1,参数2) 函数返回值: 1- return的作用:结束一个函数的执行 2- 首先返回值可以是任何的数据类型 3- 函数可以有返回值:如有返回值,必须要用变量接受才有效果

教你快速学会 Python 函数基础知识

一.函数基础 简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运行.Python中的函数在其他语言中也叫做过程或子例程,那么这些被包装起来的语句通过一个函数名称来调用. 有了函数,我们可以在很大程度上减少复制及粘贴代码的次数了(相信很多人在刚开始时都有这样的体验).我们可以把相同的代码可以提炼出来做成一个函数,在需要的地方只需要调用即可.那么,这样就提高了代码的复用率了,整体代码看起来比较简练,没有那么臃肿了. 函数在Python中是最基本的程序结构,用来最大化地

10分钟学会Python函数基础知识

看完本文大概需要8分钟,看完后,仔细看下代码,认真回一下,函数基本知识就OK了.最好还是把代码敲一下. 一.函数基础 简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运行.Python中的函数在其他语言中也叫做过程或子例程,那么这些被包装起来的语句通过一个函数名称来调用. 有了函数,我们可以在很大程度上减少复制及粘贴代码的次数了(相信很多人在刚开始时都有这样的体验).我们可以把相同的代码可以提炼出来做成一个函数,在需要的地方只需要调用即可.那么,这样就提高了代码的

Python函数基础学习(定义、函数参数、递归函数)

1.本程序是测试函数的基础.函数的参数.递归函数的测试. 函数的参数有: 必选参数.默认参数.可变参数.命名关键字参数和关键字参数 #!/usr/bin/python # -*- coding: utf-8 -*- #当程序存在中文时,注释表明使用utf-8编码解释 #函数学习 print('函数定义') def result(x,n=2): s = 1 while n>0: n = n-1 s = s*x return s #使用def定义一个函数,def 函数名(参数): print(res

python函数基础

python4种函数:全局函数,局部函数,lambda函数,方法 很多内置函数 语法:def functionName(parameters): suite return用于返回结果对象,其为可选:返回多个值,用逗号隔开,且组合为元组形式 本地变量,全局变量,内置变量 global 变量 :定义全局变量 python的闭包 参数传递形式: 位置参数:从左至右 关键字参数:按关键字名称匹配 混用上面两种方式:所有的位置参数,所有的关键字参数 定义 函数时使用默认参数:有默认值的参数 混用有默认和无

python函数基础 与文件操作

函数的定义 函数是通过赋值传递的,参数通过赋值传递给函数.def语句将创建一个函数对象并将其赋值给一个变量名,def语句的一般格式如下: 1 def function_name(arg1,arg2[,...]): 2 statement 3 [return value] 返回值不是必须的,如果没有return语句,则Python默认返回值None. 函数名的命名规则:函数名必须以下划线或字母开头,可以包含任意字母.数字或下划线的组合.不能使用任何的标点符号:函数名是区分大小写的.函数名不能是保留

4.python函数基础

一.函数 1.函数简介 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这被叫做用户自定义函数. 例如: 不用函数: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 while True:     if cpu利用率 > 90%:         #发送邮件提醒         连接邮箱服务器       

Python函数基础与函数递归

数学中函数的定义: 一般的 在一个变化过程中, 如果有两个变量 x 和 y 并且 对于 x的每一个确定的值,y都有唯一确定的值与 其对应, 那么我们就把 x 成为 自变量 把y成为 因变量 y是x的函数.自变量x的取值范围叫这个函数的定义域 y = 2*x python 中函数 是一种逻辑结构化和过程化的一种变成方法python中函数定义的方法: 1 def test(x): 2 "the function deinitions" 3 x += 1 4 return x def 定义函

Python函数基础使用

Python内置了很多有用的函数,要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数.可以直接从Python的官方网站查看文档: 也可以在交互式命令行通过help(abs)查看abs函数的帮助信息. 调用abs函数: >>> abs(100) 100 >>> abs(-20) 20 >>> abs(12.34) 12.34 调用函数的时候,如果传入的参数数量不对,会报TypeError的错误,并且Python会明确地告诉你