飘逸的python - 不使用关键字,求和1+2+…+n

根据题意,我们不能用到if/else/for/while等关键字.

--------------思考中------------

思路:

1.用递归实现循环

2.递归的终止条件不用if怎么判断呢?  答案是字典,其中用not not n来把数字n转成bool.

上代码:

def sum_(n):
    return n + {
            True:lambda:sum_(n-1),
            False:lambda:0
        }[not not n]()

print sum_(100)
时间: 2024-10-07 04:45:25

飘逸的python - 不使用关键字,求和1+2+…+n的相关文章

飘逸的python - __new__、__init__、__call__傻傻分不清

__new__: 对象的创建,是一个静态方法.第一个參数是cls.(想想也是,不可能是self,对象还没创建,哪来的self) __init__ : 对象的初始化, 是一个实例方法,第一个參数是self. __call__ : 对象可call.注意不是类,是对象. 先有创建,才有初始化.即先__new__,而后__init__. 上面说的不好理解,看样例. 对于__new__ class Bar(object): pass class Foo(object): def __new__(cls,

Python标识符和关键字

本节内容如下: 什么是标识符 什么是关键字 Python中的关键字 什么是标识符 标识符就是程序中使用的各种名称,例如:变量名.常量名.类名等等.标识符要遵循我们上一节将到的变量命名规范. 什么是关键字 关键字是Python语言中内部使用的单词,代表一定语义,例如:and.class.if.else等.这些关键字在用户为常量.变量.类等起名字的时候,不能使用.也就是,关键字不能是标识符.如果使用这些关键字,将会覆盖python内置的功能,可能会导致无法预知的错误.查看原文 Python中的关键字

python基础 - global关键字及全局变量的用法

python中global关键字主要作用是声明变量的作用域. 在C语言中,由于变量一定是先声明,后使用,所以我们可以清楚的知道,现在使用的变量是全局还是局部,比如: int a = 5; void test(void) { a = 1; // 没有先声明,所以用的是全局的变量a } void test1(void) { int a; a = 2; // 前面声明了,所以用的是局部变量a,对其所做的修改不会影响全局变量a } void main(void) { printf("before: a

飘逸的python - 为什么修改全局的dict变量不用global关键字

比如下面这段代码 s = 'foo' d = {'a':1} def f(): s = 'bar' d['b'] = 2 f() print s print d 为什么修改字典d的值不用global关键字先声明呢? 这是因为, 在s = 'bar'这句中,它是"有歧义的",因为它既可以是表示引用全局变量s,也可以是创建一个新的局部变量,所以在python中,默认它的行为是创建局部变量,除非显式声明global. 在d['b']=2这句中,它是"明确的",因为如果把d

飘逸的python - 不使用keyword,求和1+2+…+n

依据题意,我们不能用到if/else/for/while等keyword. --------------思考中------------ 思路: 1.用递归实现循环 2.递归的终止条件不用if怎么推断呢?  答案是字典,当中用not not n来把数字n转成bool. 上代码: def sum_(n): return n + { True:lambda:sum_(n-1), False:lambda:0 }[not not n]() print sum_(100)

Python中的关键字

关键字 keyword 是编程语言中规定具有特殊用途的单词,在编程中不能使用和关键字相同的 标识符.函数名.类名.属性名.方法名. 在Python中可以通过keyword模块来查看具体关键字,代码如下: 1 import keyword #导入模块 2 print(keyword.kwlist) #输出kwlist列表

python中super关键字的用法

class A: def __init__(self):    print "enter A"    print "leave A" class B(A): def __init__(self):    print "enter B"    A.__init__(self)   # old method    print "leave B" >>> b = B() enter B enter A leave

飘逸的python - 增强的格式化字符串format函数

自python2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足.那么,他跟之前的%型格式化字符串相比,有什么优越的存在呢?让我们来揭开它羞答答的面纱. 语法 它通过{}和:来代替%. "映射"示例 通过位置 字符串的format函数可以接受不限个参数,位置可以不按顺序,可以不用或者用多次,不过2.6不能为空{},2.7才可以. 通过关键字参数 通过对象属性 通过下标 有了这些便捷的"映射"方式,我们就有了偷懒利器.基本的Python知识

python基础 - lambda关键字

Python中的lambda关键字可以理解为:其功能类似于函数指针. lambda的官方翻译是匿名函数,这是相对与正常的函数来说的,举例说明: 定义一个正常的函数,实现增1运算: def plus1(x): return x+1 上面的语句实现了: 1. 定义了一个函数,函数名叫:plus1 2. 此函数有一个参数 对应的匿名函数语句写作: lambda x:x+1 注意,这是一个表达式,所以他实际上是做不了任何事情的... 那么我们如果想调用函数来实现增1运算,分别用正常函数和匿名函数的实现举