前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

Python

作者头像
云游君
发布2021-05-21 10:38:03
8920
发布2021-05-21 10:38:03
举报
文章被收录于专栏:云游的小教程

记录一些关于 Python 学习过程中的规范、问题与技巧。

教程

Code

编辑器

  • VS Code(自己目前使用的是这个,需要配置。因为自己还写些其他语言代码,为省事便配置在了一起。)
  • PyCharm

配置

ctrl + p

安装插件 Python (就叫 Python),输入如下命令,或直接在扩展里搜索。

代码语言:javascript
复制
ext install python

ctrl + shift + b 运行,或者右键选择在终端中运行 Python 文件。

记得还会自动提示安装 pylint (python 代码规范提示工具)。

如果安装失败,decoding 之类的,根据代码提示,ctrl + 路径进入文件,修改出错行编码 utf-8gbk

技巧

(文件 -> 首选项 -> 设置)

强迫症患者,C0111 这类警告可以在用户设置里添加如下代码去掉。

代码语言:javascript
复制
...
"python.linting.pylintArgs": ["--disable=C,R"],
...

因为平时写 js 用的是 tab 替换为两个空格, python 我看教程一般用的是四个空格缩进,就单独对 python 进行四个空格缩进设置了。

用户设置中添加如下代码:

代码语言:javascript
复制
...
    "[python]": {
        "editor.tabSize": 4
    },
...

规范

缩进规范

官方推荐使用 4 个空格缩进

命名规范

模块

文件名

  • 尽量使用小写命名
  • 首字母保持小写
  • 尽量不要用下划线(除非多个单词,且数量不多的情况)
代码语言:javascript
复制
snake_case
# 正确的模块名
import decoder
import html_parser

# 不推荐的模块名
import Decoder
类名

使用驼峰(CamelCase)命名风格

  • 首字母大写
  • 私有类可用一个下划线开头
代码语言:javascript
复制
class Farm():
    pass

class AnimalFarm(Farm):
    pass

class _PrivateFarm(Farm):
    pass
函数
  • 全小写
  • 可使用下划线连接
代码语言:javascript
复制
def func():
    pass

def func_with_some():
    pass
class Person():
    # 私有函数
    def _private_func():
        pass
变量名
  • 全小写
  • 可使用下划线连接
代码语言:javascript
复制
if __name__ == '__main__':
    count = 0
    school_name = ''

# 常量采用全大写,如有多个单词,使用下划线隔开
MAX_NUM = 100
MAX_IQ = 1000

Python2 & Python3

urllib

Python2 中的 urllib2, 在 Python3 中为 urllib.request

代码语言:javascript
复制
import urllib2
# 修改为
import urllib.request

线程

Python3:

  • _thread
  • threading(推荐使用)

Python2 thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python3 中不能再使用”thread” 模块。为了兼容性,Python3 将 thread 重命名为 “_thread”。

Python3 多线程 | 菜鸟教程

Q&A

如何退出解释器提示符

Linux & OS X

按下 ctrl + d 组合键或输入 exit() 并敲下 enter

Windows

按下 ctrl + z 组合键并敲击 enter

获取帮助

如果你需要获得 Python 中有关任何函数或语句的快速信息,你可以使用其内置的 help 功能。

例如,运行 help('len') 命令——这将显示出有关 len 函数的帮助,了解其是用来计算项目数量的。

按下 q 键可以退出帮助。

TIMELINE

  • 2018-01-23 ~ 2018-02-20 Crossin 的编程教室 - Python 入门
  • 2018-09-01 Python 教程 - 廖雪峰的官方网站
  • 2018-09-01 ~ 2018-12-28 简明 Python 教程

To Be Continued.

鉴于某群的朋友,总会说着‘反正云游不在,赶紧撤回。’之类的话语,就想着可不可以写一个小脚本,来监测 QQ 群内的信息,根据关键词,自动回复指定信息。

标题似乎有点死宅。 没错,最后诞生的她我就叫作小爱了。

这种东西,凭自己的能力和惰性肯定是要先找找有没有现成的轮子可以使用啦。

便直接上 github 搜了搜关键词 qq ,按 star 数量排下来,和 qq 相关,又是符合自己期待的回复相关的便是一个 python 写的 qqbot 。

项目源地址: https://github.com/pandolia/qqbot

  • 语言: python
  • 环境: Linux, Windows or Mac OSX
  • 使用 SmartQQ 协议(即过去的 WebQQ)

一些废话

(中途嫌弃文档麻烦,又试了试所谓的酷 Q 之类的软件,但可定制性不强,还有收费权限之类的) 最好还是决定好好来看看 qqbot 的使用文档。(没错,我就是想白嫖

虽然没学过 python (等我有空,我会来学的,请等着我啊!),不过看起来使用也很方便。语法的差异,便边百度边学了。(虽然踩了些小坑,但结果上来说还是满意的。)

过程

安装 python

官网下载地址

Windows 64 位的话下载 Windows x86-64 executable installer 版本即可,其他系统也各自对应。

安装 qqbot

参照 qqbot 文档 https://github.com/pandolia/qqbot

代码语言:javascript
复制
pip install qqbot

启动 qqbot

进入命令行窗口,git bash 或者 cmd 都可以。 推荐 cmd , git bash 中文可能会乱码。

代码语言:javascript
复制
qqbot -q xxxx // 这里填自己想要登陆的qq号(建议还是用小号安全些啦)

直接输入 qqbot ,用想要登陆的 qq 号扫弹出的二维码也可以。(当然上面那样也是要扫的,只是多个号时方便区分,并且会存储一定时间的登陆信息。)

指令操作

需要再打开一个命令行窗口,以便对 qqbot 进行指令操作。(指令可参照项目文档)

自定义消息响应

自己使用 python 的语法进行各种逻辑编写即可,提供的接口和属性可参见文档。

示例代码:

代码语言:javascript
复制
# -*- coding: utf-8 -*-

def onQQMessage(bot, contact, member, content):
    if content == '-hello':
        bot.SendTo(contact, '你好,我是QQ机器人')
    elif content == '-stop':
        bot.SendTo(contact, 'QQ机器人已关闭')
        bot.Stop()
  • content 即收到的文本信息,if 判断文本消息是否位 ‘-hello’,执行相应的操作。
  • bot.SendTo(contact, ‘回复的消息’) 让机器人进行回复
代码语言:javascript
复制
···
if '小爱' in content and not bot.isMe(contact, member):
      if '你好' in content:
        bot.SendTo(contact, '你好,我是云游酱的女朋友~')
···

可参见:https://github.com/YunYouJun/xiao-ai/tree/qqbot

  • Python 中语法使用 in 判断是否包含这个词,缩进进行嵌套,还有 if 后的冒号,也要切记。
  • isMe() 判断是否为自己所发的消息 (之前自己就作死写了个自己触发自己的循环,结果在群里触发 bug 刷屏了)

将以上代码另存为 sample.py (名字可以随便取,注意保存为 utf8 编码的文件)。放到 ~/.qqbot-tmp/plugins/ 目录下( ~ 代表用户主目录, windows 下为 C:\Users\xxx\.qqbot-tmp\plugins\, xxx 代表用户名 ),或系统中可以 import 到的目录下(如 python 的安装目录下的 Lib/site-packages 目录)。

加载自定义插件(即刚刚自己编写的逻辑)

代码语言:javascript
复制
qq plug sample

这些操作过程中不要关闭运行 qqbot 的命令行窗口。这是后,机器人就可以对收到的 qq 消息进行爬去检测,并进行自定义的回复了。

挂载至服务器

以上通过编写逻辑代码,已经基本可以完成自定义消息回复的功能。但是实际是自己的电脑充当服务器功能,当把执行有 qqbot 的命令行窗口关闭时,便无法继续检测了。

这时就需要挂载到 24h 运行的服务器上了。自己这里买了阿里学生云的主机,便直接拿来使用了。

安装 python (我使用的是 Linux Ubuntu 系统)

代码语言:javascript
复制
sudo apt-get install python3.5

(其他不同系统安装皆可百度或谷歌解决)

Linux 插件目录为 ~/.qqbot-tmp/plugins/(~ 代表用户主目录 /root)


Linux 远程服务器的话,当然没法弹出二维码扫描了,这时需要进行配置。

参考:https://github.com/pandolia/qqbot#七二维码管理器qqbot-配置命令行参数以及工作目录

进入 ‘~/.qqbot-tmp/v2.x.conf’ 文件,进行修改。 (使用 sftp 类型的软件或者 vim 皆可 )

代码语言:javascript
复制
# 用户 somebody 的配置
    "somebody" : {
      ···
      # 自动登录的 QQ 号
        "qq" : "xxx",
      # 接收二维码图片的邮箱账号
        "mailAccount" : "xxx@qq.com",
      # 该邮箱的 IMAP/SMTP 服务授权码
        "mailAuthCode" : "xxxxxxxxxxxx",
      # 在后台运行 qqbot ( daemon 模式)
        "daemon": False,   // 修改为 True
      ···
    }

主要填写修改以上几处即可。

使用如下命令加载配置:

代码语言:javascript
复制
qqbot -u somebody // 此处 somebody 为上述自行定义的配置,名称也可修改

WebHooks 自动部署

每次突然想要修改小爱的某个回复之类的,还要重新传输文件部署,也是很麻烦的事情。所以这时候就需要配合 GitHub 搭建 WebHooks , 当自己在本地提交修改时,服务器上的小爱也接收到消息,自动进行修改并部署。

首先要将自己的自定义插件 git 化, 在 github 上创建自己的项目,并将自己的自定义代码提交到其上。 (此后的 WebHooks 是基于 GitHub 所提供的功能,当自己提交代码时, GitHub 将会向事先设定好的地址端口发送 Post 信息,再在自己服务器这边监听端口于收到的消息,执行 pull 与 插件加载等自动化脚本。)

repo > Settings > Webhooks

接下来,编写脚本(这几个文件可以和自定义消息的脚本 sample.py 放在一起,便于 git 备份)

start_webkook.py
代码语言:javascript
复制
# coding=utf-8
# start_webkook.py
#!/usr/bin/env python
from wsgiref.simple_server import make_server
# 导入我们自己编写的application函数
from webhook import application
# 创建一个服务器,IP地址为空,端口是8000,处理函数是application:
httpd = make_server('', 8000, application)
print('Serving HTTP on port 8000...')
# 开始监听HTTP请求:
httpd.serve_forever()
webhook.py
代码语言:javascript
复制
# coding=utf-8
# webhook.py
import os
def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    DeployPath = '/root/.qqbot-tmp/plugins'
    os.system('cd ' + DeployPath)
    os.system('git reset --hard')
    os.system('git pull')  // 这里强制使得服务器代码与本地提交的代码,保持一致
    os.system('qq plug custom')
    print('XiaoAi pull finish')
    return [b'Hello, XiaoAi!'] // b 代表 bytes ,将 unicode 转为 bytes
    // 此处返回值,用户告诉 GitHub 的 Webhooks 已接收到信息,并进行了处理
  • # coding=utf-8 这个一定要放在定义行,指定编码格式

最后在文件所在的目录,执行:

代码语言:javascript
复制
nohup python start_webhook.py & // nohup 与 & 连用使得脚本在后台执行

就此结束,只要在本地 git 提交修改小爱的代码,服务器就可以收到请求并自动部署啦。

后记

自己对 python 语法并不熟悉,只能日后有时间再深入进行学习。买的小米多功能网关以及种种也都到货了,现在终于可以在床上叫小爱帮忙关灯了。

小米的 AI 音箱,我想着要是有个开放的云平台就好了,让大家可以自己编程生成更多有趣的技能,也能接入小爱的智能平台。结果一搜,真的有,不过看了看,很多还不完善,有的还显示敬请期待。不过,既然有这份心思,让我对小爱的好感又升一层了。

水滴平台-小米开放平台 https://shuidi.mi.com/

试着申请了开发者权限,要是能将 qqbot 的这个小爱接入到真正的小爱上就好了。

新的一年,也终于到来了。希望自己能继续努力,取得新的成长吧~

我很可爱,请给我钱

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-01-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 教程
  • Code
  • 编辑器
    • 配置
      • 技巧
      • 规范
        • 缩进规范
          • 命名规范
            • 模块
            • 类名
            • 函数
            • 变量名
        • Python2 & Python3
          • urllib
            • 线程
            • Q&A
              • 如何退出解释器提示符
                • Linux & OS X
                • Windows
              • 获取帮助
              • TIMELINE
              • 一些废话
              • 过程
                • 安装 python
                  • 安装 qqbot
                    • 启动 qqbot
                      • 指令操作
                        • 自定义消息响应
                          • 加载自定义插件(即刚刚自己编写的逻辑)
                            • 挂载至服务器
                              • WebHooks 自动部署
                                • start_webkook.py
                                • webhook.py
                              • 就此结束,只要在本地 git 提交修改小爱的代码,服务器就可以收到请求并自动部署啦。
                              • 后记
                              领券
                              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档