三元表达式 ,递归。

一  三元表达式:

name=input('姓名>>: ')
res='SB' if name == 'alex' else 'NB'
print(res)
如果输入的为‘alex’,那么输出为‘SB’,否则输入其他任何值输出都为为‘NB’。
那么三元表达式的,其实是一个if判断语句。
def max(x,y):
if x>y:
return x
else:
return y


二 列表生成式:
egg_list=[]
方式一:for i in range(10):
    egg_list.append('鸡蛋%s' %i)

方式二:egg_list=['鸡蛋%s' %i for i in range(10)]
print(egg_list)
输出为鸡蛋加上数字,为一个列表。
首先定义一个空列表,然后往列表里面加元素,在for循环下。

格式1:
[变量(加工过的变量) for 变量 in 可迭代对象]

   格式2:

   [变量(加工过的变量) for 变量 in 可迭代对象 if(判断条件)]

 三  递归:

函数的递归调用,在函数调用过程中,直接或间接的调用函数本身。

直接引用:
def foo(): print() foo() foo() 调用foo()函数就会一直在foo()函数里面执行,这本身是没有意义的。

间接引用:
def foo():
print()
bar()
def bar():
print()
foo()
调用:foo()会去执行foo函数,间接调用bar(),然后再通过bar()调用foo()

 

递归的应用:

def age(n):
     if n=='1':
          return 18return age(n-1)+2
age(5)
这个就是递归的应用,当我们想要拿到age(5),必须通过age(4)+2,以此类推,先回溯到age(1)。

列表嵌套列表:
def search(l):
for item in l:
if type(item) is not list:
print(item)
else:
search(item)

search([1,[2,[3,[4,[5,[6,[7]]]]]]])

递归分为两个部分:回溯和递推:

回溯的过程一定要满足某种条件下结束回溯,否则就会无限循环。

对于递归的总结:

1 递归一定要有一个明确的结束条件。

2 每进入下一次的递归,问题的规模都应该减少。

四  匿名函数:

1 匿名函数顾名思义就是没有函数名:lambda x,n:x**n。

2 也就是说:匿名函数与有名函数参数规则及作用域关系其实是一样的。

3 lambda 后冒号的函数体,一般为一个表达式,且该表达式必须为由返回值。

 那么对于lambda的应用:max,min,sort.

names={1,2,3,4,5,}
salaries={name:'egon',pwd:'123'}
对于
       
max(salaries,key=匿名函数)
res=max(salaries,key=lambda key:salaries[key])
print(list(res))
res=min(salaries,key=lambda key:salaries[key])
print(list(res))
list=['feng','zheng','alex','egon']
sort() 用法
map()
ruduce()
filter()
nums=[1,2,3,4,4,78,5,3]

映射
res=map(lambda x:x**2,nums)
将x转化成x**2输出。
reduce合并
res=reduce(lambda x,y:x+y,range(1,101),初始值)
filter筛选:只留下结果为True的
res=filter(lambda x:x.endswith('sb'),names)
或者:res=filter(lambda x: x>5,nums)
也就是说只留下满足条件的。

内置函数:

 bytes() :那么我们之前转换bytes一般用encode,现在可以直接用bytes(23344)

ord()与chr():那么ord()是将一个字符放到括号中,转化成数字。而chr与ord想反。

,divmod(),:那么divmode(x,y)将x%y所得的结果以及余数(a,b)

 

res=abs(-0.22)
print(res)#输入一个数字不管是小数还是整数都回返回他的绝对值
res=all([])
print(res)#如果()为可迭代对象那么就为真。
res=any([])
print(res)#对于()内部的可迭代对象,如果都为True则返回真,否则返回为false.
# 
res=bytes('dff',encoding='utf-8')
print(type(res))#将其他形式转化成bytes通过encode
res=chr(65)
print(res)#将数字转化成字母
ord('r')#将字母转化成对应的数字,根据assci
divmod(10,3)
print(divmod(10,3))#输出的为除数和余数。
for x,y in enumerate(['a','s','r']):
     print(x,y)#为可迭代的对象加上索引。
结果为(
0 a
1 s
2 r)
赛选
l=[1,2,3,4,3,3,5,6,67,]
res=filter(lambda x:x>5 ,l)
print(list(res))
起到赛选作用,将满足条件的赛选出
names = ['alex', 'wupeiqi', 'egon']
res=map(lambda x:x+'_nb' if x=='egon'else x+'_db',names)
print(list(res))
# 
min与max
names = ['alex', 'wupeiqi', 'egon']
res=max(names,key=lambda name:len(name))
print(res)
# 
合并
from functools import reduce#使用reduce要先调用。
res=reduce(lambda x,y:x+' '+y+' ',names,)#reduce 里面有三个参数,匿名函数,变量名,初始值
print(res)
salaries={'a':11,'c':2,'e':4}
sorted(salaries)按照key
salari=sorted(salaries,key=lambda  x:salaries[x],reverse=True)
View Code

 





 

转载于:https://www.cnblogs.com/zhangsanfeng/p/8689917.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
递归下降是一种自顶向下的语法分析方法,它通过对语法规则进行递归调用,从而将输入的源代码解析成语法树。 下面是一个简单的递归下降程序的示例,假设我们要解析的语法规则为: ``` expr -> term (+|-) expr | term term -> factor (*|/) term | factor factor -> num | ( expr ) ``` 其中,expr 表示表达式,term 表示项,factor 表示因子,num 表示字。 下面是示例程序的实现: ```python def expr(): t = term() c = lookahead() if c in ('+', '-'): match(c) t2 = expr() return (c, t, t2) else: return t def term(): f = factor() c = lookahead() if c in ('*', '/'): match(c) f2 = term() return (c, f, f2) else: return f def factor(): c = lookahead() if c == '(': match('(') e = expr() match(')') return e else: n = num() return n def num(): c = lookahead() if c.isdigit(): match(c) return c else: raise SyntaxError("Expected a number") def lookahead(): return tokens[0] def match(c): if lookahead() == c: tokens.pop(0) else: raise SyntaxError("Expected " + c) ``` 这个程序中,每个非终结符都对应一个函,这些函通过递归调用实现了对语法规则的解析。在每个函中,首先读取当前的输入符号,然后根据语法规则进行递归调用或返回相应的结果。在读取输入符号时,我们使用了一个名为 `lookahead` 的函,它返回输入符号流中的第一个符号。在匹配输入符号时,我们使用了一个名为 `match` 的函,它会将已经处理过的符号从输入符号流中移除。 当我们调用 `expr` 函时,它会读取一个 `term`,然后查看下一个输入符号是否是加号或减号。如果是,就读取下一个 `expr`,然后返回一个三元组,表示一个表达式。否则,它只返回一个 `term`。 `term` 函的实现与 `expr` 函类似。当它读取一个符号时,它会查看下一个输入符号是否是乘号或除号。如果是,就读取下一个 `term`,然后返回一个三元组,表示一个项。否则,它只返回一个因子。 `factor` 函的实现比较简单。它首先读取一个输入符号,如果是左括号,就读取一个 `expr`,然后匹配右括号。否则,它就读取一个字。 `num` 函的实现比较简单。它只需要读取一个字并返回即可。 在实现递归下降程序时,需要注意以下几点: 1. 每个非终结符对应一个函。 2. 函之间通过递归调用实现语法规则的解析。 3. 在读取输入符号时,需要使用 `lookahead` 函查看符号流的第一个符号。 4. 在匹配输入符号时,需要使用 `match` 函将已经处理过的符号从输入符号流中移除。 5. 当输入符号不符合预期时,需要抛出 `SyntaxError` 异常。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值