6个超赞的Python小技巧

Python越来越流行,因为它不但强大而且很容易掌握。我使用Python开发软件已经有几年了,但直到这半年才成为专业Python开发者。这里分享6个超级实用的python开发技巧吧!

  • 字符串操作列表推导式lambda表达式映射函数单行实现if、elif和else条件判断拉链函数

1、字符串操作

可以使用算数表达式来操作字符串,例如 + 和 * :

>>> my_string = "Hi Medium..!"
>>> print(my_string * 2)
Hi Medium..!Hi Medium..!
>>> print(my_string + " I love Python" * 2)
Hi Medium..! I love Python I love Python

也可以使用[::-1]来轻松地翻转字符串,而且不局限于字符串!

>>> print(my_string[::-1])
!..muideM iH>>> my_list = [1,2,3,4,5]
>>> print(my_list[::-1])
[5, 4, 3, 2, 1]

翻转操作可以应用于单词列表吗?当然!我们可以开发一个Yoda翻译器:

>>> word_list = ["awesome", "is", "this"]
>>> print(' '.join(word_list[::-1]) + '!')
this is awesome!

上面我们使用.join()方法用空格符号反向连接列表中的所有成员,最后再添加一个感叹号。

6个超赞的Python小技巧

 

2、列表推导式

你知道吗,当我掌握这个技巧时,我感觉整个世界都变了!这种操作列表 的方式真的太强大、直观而且可读性高。

例如,假设我们有一个函数来计算输入参数的平方再加5:

>>> def stupid_func(x):
>>> return x**2 + 5

现在我们要用这个函数处理一个列表中的所有奇数序号的成员,如果你不知道 列表推导式,可能会这样来实现:

>>> my_list = [1, 2, 3, 4, 5]
>>> new_list = []
>>> for x in my_list:
>>> if x % 2 != 0:
>>> new_list.append(stupid_func(x))
>>> print(new_list)
[6, 14, 30]

但是有更简单的实现方法!

>>> my_list = [1, 2, 3, 4, 5]
>>> print([stupid_func(x) for x in my_list if x % 2 != 0])
[6, 14, 30]

列表推导式的语法是

[ expression for item in list ]

还可以使用额外的条件判断表达式:

[ expression for item in list if conditional ]

上面这个表达式实际上等价于:

>>> for item in list:
>>> if conditional:
>>> expression

实际上你还可以进一步优化,因为我们其实不需要那个stupid_func:

>>> print([x ** 2 + 5 for x in my_list if x % 2 != 0])
[6, 14, 30]

COOOOOOOOOOOOOOOOOOOOOOOOOOOL!

6个超赞的Python小技巧

 

3、Lambda表达式

Lambda看起来有点怪异,不过和这篇文章中的其他内容一样,Lambda 超级强大,而且一旦你理解了就会发现它其实很直观。

基本上Lambda表达式就是一个匿名函数。为什么要匿名?这是因为Lambda 表达式通常应用于执行简单的操作,因此使用def来正式定义一个函数 就显得有点累赘了。

让我们以上面的计算为例看一下Lambda的使用方法。在上面的代码中 我们使用正式的函数声明语法def stupid_func(x),现在让我们使用 Lambda表达式:

>>> stupid_func = (lambda x : x ** 2 + 5)
>>> print([stupid_func(1), stupid_func(3), stupid_func(5)])
[6, 14, 30]

为什么要使用这么怪异的语法?Lambda的好处在于你可以执行一些简单 的操作而无需提前定义一个函数。例如,假设有一组数值,我们如何 用Python来排序?一种方法是使用sorted()函数:

>>> my_list = [2, 1, 0, -1, -2]
>>> print(sorted(my_list))
[-2, -1, 0, 1, 2]

sorted()默认是按升序对列表成员排序,但是如果我们希望按成员的 平方和排序,就可以使用lambda表达式了:

>>> print(sorted(my_list, key = lambda x : x ** 2))
[0, -1, 1, -2, 2]

6个超赞的Python小技巧

 

4、映射函数 map

映射函数map()可以使用指定的函数来处理像列表之类的成员序列。例如, 假设我们希望得到两个列表中对应成员的乘积的结果列表,应该怎么做? 使用Lambda表达式和映射函数就可以了!

>>> print(list(map(lambda x, y : x * y, [1, 2, 3], [4, 5, 6])))
[4, 10, 18]

如果不使用Lambda和map的话,代码就没这么优雅了:

>>> x, y = [1, 2, 3], [4, 5, 6]
>>> z = []
>>> for i in range(len(x)):
>>> z.append(x[i] * y[i])
>>> print(z)
[4, 10, 18]

6个超赞的Python小技巧

 

5、单行条件判断

在你的代码中可能会有这样的条件判断逻辑:

>>> x = int(input())
>>> if x >= 10:
>>> print("Horse")
>>> elif 1 < x < 10:
>>> print("Duck")
>>> else:
>>> print("Baguette")

运行上面的代码,会提示我们输入,假设输入5的话,就会显示 Duck。但是我们可以只用一行代码就实现同样的功能!

print("Horse" if x >= 10 else "Duck" if 1 < x < 10 else "Baguette")

实在是妙!

6个超赞的Python小技巧

 

6、拉链函数 zip

上面的映射函数map()对两个列表中并行地执行某个指定的处理函数。 拉链函数zip()比这还要简单。

假设我们有两个列表,一个记录人名,另一个记录姓氏,那么我们应该 如何合并得到一个全名列表?答案是使用zip()!

>>> first_names = ["Peter", "Christian", "Klaus"]
>>> last_names = ["Nistrup", "Smith", "Jensen"]
>>> print([' '.join(x) for x in zip(first_names, last_names)])
['Peter Nistrup', 'Christian Smith', 'Klaus Jensen']
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pygame模块可以用来实现很多有趣的游戏,其中包括经典的贪吃蛇游戏。通过使用Pygame模块的绘图功能,可以实现一个具有视觉效果的贪吃蛇游戏。 下面是一个简单的贪吃蛇游戏的实现: ```python import pygame import random # 初始化游戏 pygame.init() # 定义游戏窗口大小 win_width = 800 win_height = 600 # 创建游戏窗口 win = pygame.display.set_mode((win_width, win_height)) # 设置游戏标题 pygame.display.set_caption("贪吃蛇") # 定义颜色 white = (255, 255, 255) black = (0, 0, 0) red = (255, 0, 0) green = (0, 255, 0) # 设置游戏时钟 clock = pygame.time.Clock() # 定义蛇的属性 snake_block = 10 snake_speed = 15 # 定义字体 font_style = pygame.font.SysFont(None, 50) # 定义函数,用于显示文字 def message(msg, color): message = font_style.render(msg, True, color) win.blit(message, [win_width / 6, win_height / 3]) # 定义函数,用于绘制蛇 def draw_snake(snake_block, snake_list): for x in snake_list: pygame.draw.rect(win, green, [x[0], x[1], snake_block, snake_block]) # 定义游戏循环 def game_loop(): game_over = False game_close = False # 定义蛇的初始位置 x1 = win_width / 2 y1 = win_height / 2 # 定义蛇的移动方向 x1_change = 0 y1_change = 0 # 定义蛇的初始长度 snake_List = [] Length_of_snake = 1 # 定义食物的初始位置 foodx = round(random.randrange(0, win_width - snake_block) / 10.0) * 10.0 foody = round(random.randrange(0, win_height - snake_block) / 10.0) * 10.0 # 游戏循环 while not game_over: while game_close == True: win.fill(white) message("你输了,按 Q 退出,按 C 重新开始!", red) pygame.display.update() for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: game_over = True game_close = False if event.key == pygame.K_c: game_loop() for event in pygame.event.get(): if event.type == pygame.QUIT: game_over = True if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: x1_change = -snake_block y1_change = 0 elif event.key == pygame.K_RIGHT: x1_change = snake_block y1_change = 0 elif event.key == pygame.K_UP: y1_change = -snake_block x1_change = 0 elif event.key == pygame.K_DOWN: y1_change = snake_block x1_change = 0 # 判断蛇是否超出边界 if x1 >= win_width or x1 < 0 or y1 >= win_height or y1 < 0: game_close = True # 更新蛇的位置 x1 += x1_change y1 += y1_change # 绘制游戏背景 win.fill(white) # 绘制食物 pygame.draw.rect(win, red, [foodx, foody, snake_block, snake_block]) # 更新蛇的长度 snake_Head = [] snake_Head.append(x1) snake_Head.append(y1) snake_List.append(snake_Head) if len(snake_List) > Length_of_snake: del snake_List[0] # 判断蛇是否吃到食物 for x in snake_List[:-1]: if x == snake_Head: game_close = True # 绘制蛇 draw_snake(snake_block, snake_List) # 更新游戏窗口 pygame.display.update() # 判断蛇是否吃到食物 if x1 == foodx and y1 == foody: foodx = round(random.randrange(0, win_width - snake_block) / 10.0) * 10.0 foody = round(random.randrange(0, win_height - snake_block) / 10.0) * 10.0 Length_of_snake += 1 # 设置游戏速度 clock.tick(snake_speed) # 退出游戏 pygame.quit() quit() # 启动游戏循环 game_loop() ``` 这个程序可以实现一个基本的贪吃蛇游戏,玩家可以使用方向键控制蛇的移动方向,吃到食物后蛇的长度会增加。当蛇碰到边界或自己时,游戏结束。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值