python——函数式编程,引用全解

9.函数式编程

  • 函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。

  • 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

    函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

  • 关键字def

  • 定义如下

def function(参数1,参数2...):
    代码块
    return ???
    
# 调用 
function(参数1,参数2,...)

参数传

在 python 中,类型属于对象,变量是没有类型的:

def sayHello():
    print("hello")

sayHello()

def func2(i):
    print(type(i))

func2(1)  # <class 'int'>
func2("1")  # <class 'str'>
func2(1.0)  # <class 'float'>
func2(True)  # <class 'bool'>
func2([1, 2, 3, 4])  # <class 'list'>
func2((1, 2, 3))  # <class 'tuple'>
func2({1, 2, 3})  # <class 'set'>
func2({1: "你好", 2: "吃了嘛", 3: "在干啥"})  # <class 'dict'>

返回值

在python中返回值可以没有也可以有多个!没有返回值时默认为None

# 以 *开头的参数叫不定长参数,一个函数的不定长参数只能有一个且只能是最后一个参数,调用时会以元组的形式传入
def func1(a, *args):
    print(args)
    return a, args


def func2():
    return


ret = func1(1, 2)  # (2,)
print(ret)  # (1, (2,))


def func3(*args):
    return args


a, b, c = func3(1, 2, 3)  # 可以通过这种方式取出元组里的值

print(a)
print(b)
print(c)

作用域

  • 直接卸载外边的变量和函数等等的一切的命名空间称之为全局作用域

  • 函数内部定义的变量函数等,命名空间称之为函数作用域或局部作用域

  • 函数内部可以直接访问全局作用域的变量和函数

a = 10
b = 20


def func1():
    b = 10
    # print(a)  # 直接访问外部的
    print(b)  # 当函数内部有这个变量时会优先使用内部的变量
    print(globals())  # 查看命名空间全局作用域的命名空间

    # 如果 要在函数里顶一个全局变量或者使用全局变量覆盖要先声明
    global c  # 一般不会在这里定义全局变量
    c = 10

    # 如果我们希望在函数里直接修改全局作用的变量需要先声明否则无法修改,
    global a  # 一般放在开头
    a = a - 10


func1()
print(c)
print(a)

值传递与引用传递

  • 值传递是指将数值传递给参数
  • 引用传递是指把变量的引用传递给参数
  • 在python中是值传递
a = 10

def test(a):
    print("修改前a", a)
    a = a - 10  # 
    print("修改后a", a)

test(a)
print(a)  # 函数内部并不会改变外部的变量

函数的引用

  • 函数的引用就是把函数本身作传递给某个变量
def function():
    print("我是fun1")

a = function  # 函数的引用,将function这个函数像变量一样赋值给a

a()  # 调用 function

lambda函数

  • lambda 函数是匿名函数
  • 定义如下
lambda 参数1,参数2...: 语句
  • 用法
a = 10
b = 10

fun = lambda x, y: x > 1 and y < 10 

c = fun(a, b)  # False
print(c)

print((lambda x: x > 10)(a))  # False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pointer-faker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值