鱼C论坛

 找回密码
 立即注册
查看: 2597|回复: 5

关于21讲的一些疑问

[复制链接]
发表于 2016-10-2 10:22:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 喜欢小翘臀 于 2016-10-3 19:04 编辑

1  首先先问各位一个白痴问题:是不是if啊else啊for啊写成一行的时候后面就不用加冒号啊,比如在列表推导式的时候,现在遇到的lambda的时候。能不能咱们写lambda的时候也像def一样漂漂亮亮的写成段落配合缩进看的美观大方呢?我自己尝试写了就会报错invalid syntax

2  我在写一个100以内能被3整除的lambda时是这样写的:
    lambda x : for x in range(0,100) if x % 3 == 0 print (x)
    这里会报错 SyntaxError: invalid syntax。我不知道是自己哪里错了,如果是写简单的lamb x:x -= 1 还行,复杂一点就报这个错
    还有就是我想用一个列表推倒式代替zip,我这样写也报同样的错误
    lambda x=[],y=[] : for each in range(  min(  len(x),len(y)  )  )   print(   [    x[each],y[each]   ]   )

3  这是课后习题的代码:

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

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

用男人的直觉来猜应该参数s是代表重复的次数,double()括号里的是重复的内容
我有个问题是 double = make_repeat(2)是把2传到s那里了吧,它为何能传到s? 2为什么不是传给n的实参然后s没有赋值报个错啥的?


最后感谢花时间看我写的这么多字
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-10-2 12:10:16 | 显示全部楼层
1.即使写在一行仍要有冒号。
  1. >>> if 3 + 4 == 7: print('OK')

  2. OK
复制代码

匿名函数都是相对简单的,要求写在一行,当然可以用\换行,如果也写成多行缩进的就跟def没有差别了。

2.lambda是一个参数值得到一个返回值,把列表推导式的方法放到这里是不合适的。
3.n是重复次数,double()括号里的s
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-2 12:22:56 | 显示全部楼层
冬雪雪冬 发表于 2016-10-2 12:10
1.即使写在一行仍要有冒号。

匿名函数都是相对简单的,要求写在一行,当然可以用\换行,如果也写成多行 ...

谢谢您的解答
1  之前应该是某节课里讲到三元操作符的时候,表达式比如: small = x if x < y else y
    这里写成了一行没有冒号是因为三元操作符表达式就是这么规定的是么?是不是三元操作表达式一般也是
处理一些比较简单的表达式?
2   
lambda x : for x in range(0,100) if x % 3 == 0 :print (x)
    这个隐藏函数也会报错,问题是在哪里呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-2 12:27:11 | 显示全部楼层
冬雪雪冬 发表于 2016-10-2 12:10
1.即使写在一行仍要有冒号。

匿名函数都是相对简单的,要求写在一行,当然可以用\换行,如果也写成多行 ...

谢谢您的解答
1  之前应该是某节课里讲到三元操作符的时候,表达式比如: small = x if x < y else y
    这里写成了一行没有冒号是因为三元操作符表达式就是这么规定的是么?是不是三元操作表达式一般也是
处理一些比较简单的表达式?
2   
    lambda x : for x in range(0,100) if x % 3 == 0 :return print (x)
    这个隐藏函数也会报错,问题是在哪里呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-2 12:40:36 | 显示全部楼层
喜欢小翘臀 发表于 2016-10-2 12:27
谢谢您的解答
1  之前应该是某节课里讲到三元操作符的时候,表达式比如: small = x if x < y else y
...

1.三元操作符的写法就是这样的,复杂些的也可以写,如:
  1. >>> x = 1
  2. >>> y = 2
  3. >>> z = 3
  4. >>> large = x if x > y else y if y >z else z
  5. >>> large
  6. 3
复制代码

但一般是比较简单的,毕竟太复杂的写在一行不容易看明白。
2.lambda的格式为lambda 参数:返回值,无需return语句
你的问题:1)只能返回一个值,不能print,2)也无法使用for循环,3)如果要用到if只能是三元操作符表达式
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-2 18:09:22 | 显示全部楼层
冬雪雪冬 发表于 2016-10-2 12:40
1.三元操作符的写法就是这样的,复杂些的也可以写,如:

但一般是比较简单的,毕竟太复杂的写在一行不 ...

您说得我明白了,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-23 03:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表