Python特殊语法简介(一)

列表解析(列表推导式):

在各种稀奇古怪的语法中,列表解析的使用频率应该时最高的,对于代码的简化效果也非常明显。

首先说一下什么是列表解析:
基本概念就是一种语法结构,其存在是为了方便通过已有列表,去方便快速创建新的列表。

语法:
1.[expression for iter_val in iterable]
2.[expression for iter_val in iterable if cond_expr]

举一个例子,比如1-10的平方,通常的写法如下:

a = []
for i in range(1,11):
	a.append(i*i)
print(a)   #[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

但如果使用列表解析,看起来就舒服多了:

a = [i ** 2 for i in range(1, 11)]
print(a)   # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

针对上面的例子中,我们还可以加入if语句:i>5

a = [i ** 2 for i in range(1, 11) if i>5]
print(a)   # [36, 49, 64, 81, 100]

多重列表解析:
题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

s = []
for i in range(1,5):
    for j in range(1,5):
        for k in range(1,5):
            if i != j and j != k and i != k :
                s.append([i,j,k])
print("一共有"+str(len(s))+"个组合,分别是:",s)
一共有24个组合,分别是: [[1, 2, 3], [1, 2, 4], [1, 3, 2], [1, 3, 4], [1, 4, 2], [1, 4, 3], [2, 1, 3], [2, 1, 4], [2, 3, 1], [2, 3, 4], [2, 4, 1], [2, 4, 3], [3, 1, 2], [3, 1, 4], [3, 2, 1], [3, 2, 4], [3, 4, 1], [3, 4, 2], [4, 1, 2], [4, 1, 3], [4, 2, 1], [4, 2, 3], [4, 3, 1], [4, 3, 2]]

使用多重列表解析的写法如下:

s = [[i,j,k] for i in range(1,5) for j in range(1,5) for k in range(1,5) if i != j and j != k and i != k]
print("一共有"+str(len(s))+"个组合,分别是:",s)
一共有24个组合,分别是: [[1, 2, 3], [1, 2, 4], [1, 3, 2], [1, 3, 4], [1, 4, 2], [1, 4, 3], [2, 1, 3], [2, 1, 4], [2, 3, 1], [2, 3, 4], [2, 4, 1], [2, 4, 3], [3, 1, 2], [3, 1, 4], [3, 2, 1], [3, 2, 4], [3, 4, 1], [3, 4, 2], [4, 1, 2], [4, 1, 3], [4, 2, 1], [4, 2, 3], [4, 3, 1], [4, 3, 2]]

三元表达式:

允许将产生一个值的if-else块写到一行或一个表达式中,语法如下:
value=true-expr if condition else false-expr

举个例子:提示输入一个数字,判断是否为数字。

i = input("请输入一个数字:")
if i.isdigit():
    print('数字')
else:
    print('其他')

第一种:结果1 if 条件 else 结果2

i = input("请输入一个数字:")
print('数字' if i.isdigit() else '其他')

第二种:(结果2,结果1)[判断]

i = input("请输入一个数字:")
print(('其他','数字')[i.isdigit()])

第三种:{条件值1:结果1,条件值2:结果2}[判断]

i = input("请输入一个数字:")
print({True:'数字',False:'其他'}[i.isdigit()])

举例:

i = int(input("请输入一个数字:"))
if i<=10:
    if i>=1:
        print('该数字大于等于1,且小于等于10')
    else:
        print('该数字小于1')
else:
    if i <= 20:
        print('该数字大于10,且小于等于20')
    else:
        print('该数字大于20')

print(('该数字大于1,且小于等于10' if i>=1 else '该数字小于1') 
      if i<=10 else
      ('该数字大于10,且小于等于20' if i <= 20 else '该数字大于20'))

with - as的用法:

有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。
如果不用with语句,代码如下:

file = open("/tmp/foo.txt")
data = file.read()
file.close()

这里有两个问题。一是可能忘记关闭文件句柄;二是文件读取数据发生异常,没有进行任何处理。下面是处理异常的加强版本:

file = open("/tmp/foo.txt")
try:
    data = file.read()
finally:
    file.close()

虽然这段代码运行良好,但是太冗长了。这时候就是with一展身手的时候了。除了有更优雅的语法,with还可以很好的处理上下文环境产生的异常。下面是with版本的代码:

with open("/tmp/foo.txt") as file:
    data = file.read()

这个语法是用来代替传统的try…finally语法的。
基本思想是with所求值的对象必须有一个__enter__()方法,一个__exit__()方法。
紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()方法。

for - else的用法:

for和else可以搭配使用。
for正常执行完,else也会跟着执行。for没有正常执行完,中间异常退出,则else也不会执行。

a= True
for i in range(1,11):
    print(i)
    if i == 9:
        a = False
        break
if a:
    print('yes')
else:
    print('no')
for i in range(1,11):
    print(i)
    if i == 9:
        break
else:
    print('OK')
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值