Boibot 发表于 2021-9-5 18:00:36

分别把lambda函数变为普通函数,把make_repeat(n)函数变为lambda函数

def make_repeat(n):
      return lambda s : s * n

double = make_repeat(2)
print(double(8))
print(double('FishC')

把lambda函数变为普通函数如下:
def make_repeat(n):
    def sn(s):
      return s * n

double = make_repeat(2)
print(double(8))
print(double('FishC'))

Traceback (most recent call last):
File "C:/Users/Desktop/作业/67.py", line 6, in <module>
    print(double(8))
TypeError: 'NoneType' object is not callable
为何会报错?

把make_repeat(n)函数变为lambda函数如下:
lambda n:   
    return lambda s : s * n

double = make_repeat(2)
print(double(8))
print(double('FishC'))   
不能run

kogawananari 发表于 2021-9-5 19:01:07

你make_repeat都没返回值

suchocolate 发表于 2021-9-5 19:03:42

本帖最后由 suchocolate 于 2021-9-5 19:08 编辑

# lambda函数
def make_repeat(n=1):
    return lambda n : n * 2

double = make_repeat()
print(double(8))
print(double('FishC'))


# lambda函数:高效
double = lambda n : n * 2
print(double(8))
print(double('FishC'))



# 普通函数
def make_repeat(n):
    return n * 2
print(make_repeat(8))
print(make_repeat('FishC'))

Boibot 发表于 2021-9-5 20:49:01

kogawananari 发表于 2021-9-5 19:01
你make_repeat都没返回值

make_repeat是没有返回值,但是内嵌函数有返回值的,why?

Boibot 发表于 2021-9-5 21:14:22

suchocolate 发表于 2021-9-5 19:03


def make_repeat(n=1):
    return lambda n : n * 2

double = make_repeat()
print(double(8))
print(double('FishC'))
double(8)=make_repeat()(8)= make_repeat(n=1)(8)=lambda 8:8 * 2=16
默认参数是1,为啥make_repeat函数的参数和lambda函数的参数都是n这个变量,为什么?

Boibot 发表于 2021-9-5 21:39:05

suchocolate 发表于 2021-9-5 19:03


我写的普通函数:
def make_repeat(n):
    def sn(s):
      return s * n
    return sn

double = make_repeat(2)
print(double(8))
print(double('FishC'))
还行吧

Boibot 发表于 2021-9-5 21:48:28

suchocolate 发表于 2021-9-5 19:03


我修改的lambda函数的过程:
def make_repeat(n):
      return lambda s : s * n
double = make_repeat(2) = lambda s: s * 2
print(double(8))
print(double('FishC')
            ||
            \/
double = lambda s : s * 2
print(double(8))
print(double('FishC'))

suchocolate 发表于 2021-9-5 21:50:50

Boibot 发表于 2021-9-5 21:14
double(8)=make_repeat()(8)= make_repeat(n=1)(8)=lambda 8:8 * 2=16
默认参数是1,为啥make_repeat ...

1)默认是多少都行,只是为了防止没有代入参数报错。
2)是什么字母都行,没有特定要求。

Boibot 发表于 2021-9-5 22:14:40

suchocolate 发表于 2021-9-5 19:03


这是我修改make_repeat函数为普通函数的过程:下面有几处为什么报错?
def make_repeat(n):
    def sn(s):
      return s * n
    return sn

double = make_repeat(2) = return s * 2
print(double(8))
print(double('FishC'))推导过程

def make_repeat(n):
    return s * n
n = 2
print(make_repeat(n)(8))
print(make_repeat(n)('FishC')) error

def make_repeat(n)(s):   
    return s * n
n = 2
print(make_repeat(n)(8))
print(make_repeat(n)('FishC')) error


def make_repeat(n,s):   
    return s * n
n = 2
print(make_repeat(n,8))
print(make_repeat(n,'FishC'))right


def make_repeat(n=2,s):   
    return s * n
print(make_repeat(n,8))
print(make_repeat(n,'FishC'))error


def make_repeat(s):   
    return s * 2
print(make_repeat(8))
print(make_repeat('FishC'))    right

Boibot 发表于 2021-9-5 22:16:31

{:9_240:}

Boibot 发表于 2021-9-5 22:17:02

自己顶自己{:9_227:}

Boibot 发表于 2021-9-5 22:20:07

suchocolate 发表于 2021-9-5 21:50
1)默认是多少都行,只是为了防止没有代入参数报错。
2)是什么字母都行,没有特定要求。

我试了不加默认参数也可以正常运行

suchocolate 发表于 2021-9-5 22:58:04

本帖最后由 suchocolate 于 2021-9-5 23:00 编辑

Boibot 发表于 2021-9-5 22:14
这是我修改make_repeat函数为普通函数的过程:下面有几处为什么报错?

第6行,return是函数内使用的语句,不能用于普通赋值运算。
建议你仔细学一下函数基础,再去练习这道题。
https://www.runoob.com/python3/python3-function.html

suchocolate 发表于 2021-9-5 23:03:26

Boibot 发表于 2021-9-5 22:20
我试了不加默认参数也可以正常运行


你确定?

Boibot 发表于 2021-9-5 23:12:22

suchocolate 发表于 2021-9-5 23:03
你确定?

我说的是这:
def make_repeat(s):   
    return s * 2
print(make_repeat(8))
print(make_repeat('FishC'))

doublt = make_repeat()这里面的2是默认参数?实参吧?

display-gong 发表于 2021-9-5 23:13:51

路过,打酱油

Boibot 发表于 2021-9-5 23:14:18

suchocolate 发表于 2021-9-5 22:58
第6行,return是函数内使用的语句,不能用于普通赋值运算。
建议你仔细学一下函数基础,再去练习这道 ...

第6行,我知道,那是我推导的过程,草稿

suchocolate 发表于 2021-9-5 23:14:40

Boibot 发表于 2021-9-5 23:12
我说的是这:




2不是参数,是函数中的常量。
s是函数的形式参数。
运算时传入的8和FishC是实际参数。

suchocolate 发表于 2021-9-5 23:15:38

Boibot 发表于 2021-9-5 23:14
第6行,我知道,那是我推导的过程,草稿

那请把你报错的代码贴出来,别贴草稿好吗?

Boibot 发表于 2021-9-5 23:29:34

10-14行,s没赋值报错,函数的参数不能用2个括号
16-20行,函数的参数不能用2个括号
30-33行为什么报错?
页: [1] 2
查看完整版本: 分别把lambda函数变为普通函数,把make_repeat(n)函数变为lambda函数