桌面宠物!通过python制作属于自己的桌面宠物

一、桌面宠物素材

1.1 需要准备什么素材

        桌面宠物的各种动画效果,可以看作是由一个个GIF动图拼接而成,我们需要准备多组GIF动图来实现桌面宠物的动作切换。


        最好选取是白底的GIF动图。

1.2 介绍几种获得GIF动图的方式

1.2.1 通过pr实现视频转GIF


        pr在导出的时候选择动画GIF可以直接导出GIF动图。

        当然了想要白底就需要自已用“蒙版”和画笔工具自己抠图了。

1.2.2 通过ps实现图片组转GIF

        ps会高级一点,首先点击最上方的窗口,再点击时间轴,在下方显示出的时间轴的最右边的加号可以添加你想要添加的图片。图层右边可以选择删除背景。


        然后选择最上方的文件,选择导出,选择导出为web所用格式旧版,即可




1.2.3 百度一下,获取网上现成的GIF资源

① 百度:“制作GIF动图”

② 百度    “GIF动图资源”

你想要的角色人物素材都在这里!最实用的2d游戏素材! - 知乎

二、python实现代码



2.1 目录结构

        项目的目录结构整体如下:main.py为主程序代码。


        normal下的GIF图是宠物平常会随机切换的动作GIF图, click下面的GIF图是点击宠物之后的宠物动作的GIF图


        dialog.txt 记录了宠物的对话信息


         tigerIcon.jpg是缩小到托盘后托盘图标的图片



2.2 实现代码

2.2.1 引用包

        os包用于加载文件,sys包用于退出程序,random包用于程序中一些需要调用随机数的操作。其他的三个包则是用于实现桌面宠物的基础。

import os
import sys
import random
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

2.2.2 主代码部分

if __name__ == '__main__':
    # 创建了一个QApplication对象,对象名为app,带两个参数argc,argv
    # 所有的PyQt5应用必须创建一个应用(Application)对象。sys.argv参数是一个来自命令行的参数列表。
    app = QApplication(sys.argv)
    # 窗口组件初始化
    pet = DesktopPet()
    # 1. 进入时间循环;
    # 2. wait,直到响应app可能的输入;
    # 3. QT接收和处理用户及系统交代的事件(消息),并传递到各个窗口;
    # 4. 程序遇到exit()退出时,机会返回exec()的值。
    sys.exit(app.exec_())

2.2.3 代码运行流程

整个运行流程为:

(1)通过self.init():实现窗体的初始化,宠物的GIF图在这个窗体中播放。

(2)通过self.initPall():配置托盘化

(3)通过self.initPetImage():将宠物的静态GIF资源,包括对话和GIF动图进行加载

(4)通过self.petNormalAction():实现宠物随机切换动作和语句的功能

class DesktopPet(QWidget):
    def __init__(self,parent=None,**kwargs):
        super(DesktopPet,self).__init__(parent)
        # 窗体初始化
        self.init()
        # 托盘化初始
        self.initPall()
        # 宠物静态gif图加载
        self.initPetImage()
        # 宠物正常待机,实现随机切换动作
        self.petNormalAction()

① 加载显示GIF动图的窗体,通过函数init实现,其代码配置如下:

        这几句的作用是对展示宠物的窗体进行一些初步的设置,使得白色GIF图能够去掉背景的白色,将GIF图透明的展示出来

    # 窗体初始化
    def init(self):
        # 初始化
        # 设置窗口属性:窗口无标题栏且固定在最前面
        # FrameWindowHint:无边框窗口
        # WindowStaysOnTopHint: 窗口总显示在最上面
        # SubWindow: 新窗口部件是一个子窗口,而无论窗口部件是否有父窗口部件
        # https://blog.csdn.net/kaida1234/article/details/79863146
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.SubWindow)
        # setAutoFillBackground(True)表示的是自动填充背景,False为透明背景
        self.setAutoFillBackground(False)
        # 窗口透明,窗体空间不透明
        self.setAttribute(Qt.WA_TranslucentBackground,True)
        # 重绘组件、刷新
        self.repaint()

② 实现能托盘显示的功能,通过函数initPall实现,其代码配置如下:

        主要有下面这几个操作:

        (1)读取静态图片资源设置托盘化的图标


         (2)设置托盘化图片点击右键显示的菜单,并对这些菜单的点击操作进行设置


流程代码如下: 

 # 托盘化设置初始化
    def initPall(self):
        # 导入准备在托盘化显示上使用的图标
        icons = os.path.join('tigerIcon.jpg')
        # 设置右键显示最小化的菜单项
        # 菜单项退出,点击后调用quit函数
        quit_action = QAction('退出',self,triggered=self.quit)
        # 设置这个点击选项的图片
        quit_action.setIcon(QIcon(icons))
        # 菜单项显示,点击后调用showing函数
        showing = QAction(u'显示',triggered=self.showwin)
        # 新建一个菜单项控件
        self.tray_icon_menu = QMenu(self)
        # 在菜单栏添加一个无子菜单的菜单项‘退出’
        self.tray_icon_menu.addAction(quit_action)
        # 在菜单栏添加一个无子菜单的菜单项‘显示’
        self.tray_icon_menu.addAction(showing)
        # QSystemTrayIcon类为应用程序在系统托盘中提供一个图标
        self.tray_icon = QSystemTrayIcon(self)
        # 设置托盘化图标
        self.tray_icon.setIcon(QIcon(icons))
        # 设置托盘化菜单项
        self.tray_icon.setContextMenu(self.tray_icon_menu)
        # 展示
        self.tray_icon.show()

其中‘退出’项涉及到的函数代码如下:

    # 退出操作,关闭程序
    def quit(self):
        self.close()
        sys.exit()

其中‘显示’项涉及到的函数代码如下:

    # 显示宠物
    def showwin(self):
        # setWindowOpacity()设置窗体的透明度,通过调整窗体透明度实现宠物的展示和隐藏
        self.setWindowOpacity(1)

③ 宠物静态资源的加载,通过函数initPetImage实现,其代码配置如下:

        静态资源的加载主要涉及两个部分,对话框内容的加载和图片内容的加载。

    # 宠物静态gif图加载
    def initPetImage(self):
        # 对话框定义
        self.talkLabel = QLabel(self)
        # 对话框样式设计
        self.talkLabel.setStyleSheet(font:15pt '楷体';border-width: 1px;color:blue;) 
        # 定义显示图片部分
        self.image = QLabel(self)
        # QMovie是一个可以存放动态视频的类,一般是配合QLabel使用的,可以用来存放GIF动态图
        self.movie = QMovie(normal/normal1.gif)
        # 设置标签大小
        self.movie.setScaledSize(QSize(200,200))
        # 将Qmovie在定义的image中显示
        self.image.setMovie(self.movie)
        self.movie.start()
        self.resize(1024,1024)
        # 调用自定义的randomPosition,会使得宠物出现位置随机
        self.randomPosition()
        # 展示
        self.show()
        # https://new.qq.com/rain/a/20211014a002rs00
        # 将宠物正常待机状态的动图放入pet1中
        self.pet1 = []
        for i in os.listdir(normal):
            self.pet1.append(normal/ + i)
        # 将宠物正常待机状态的对话放入pet2中
        self.dialog = []
        # 读取目录下dialog文件
        with open(dialog.txt,r) as f:
            text = f.read()
            # 以\n 即换行符为分隔符,分割放进dialog中
            self.dialog = text.split(\n)

        其中我们希望宠物出现的位置是随机的而不是固定的,那么便通过 randomPosition()实现宠物出现位置的随机。

    # 宠物随机位置
    def randomPosition(self):
        # screenGeometry()函数提供有关可用屏幕几何的信息
        screen_geo = QDesktopWidget().screenGeometry()
        # 获取窗口坐标系
        pet_geo = self.geometry()
        width = (screen_geo.width() - pet_geo.width()) * random.random()
        height = (screen_geo.height() - pet_geo.height()) * random.random()
        self.move(width,height)

④ 宠物正常待机,实现随机切换动作,对话框通过函数petNormalAction实现,其代码配置如下

        这里通过QTimer实现定时操作,到达设置的时间即调用相关的函数。其中condition为标识宠物状态的flag,0为平常状态,1为点击状态,这个状态可按照自己的喜好拓展。talk_condition同理,为标识宠物对话状态的flag。

# 宠物正常待机动作
    def petNormalAction(self):
        # 每隔一段时间做个动作
        # 定时器设置
        self.timer = QTimer()
        # 时间到了自动执行
        self.timer.timeout.connect(self.randomAct)
        # 动作时间切换设置
        self.timer.start(3000)
        # 宠物状态设置为正常
        self.condition = 0
        # 每隔一段时间切换对话
        self.talkTimer = QTimer()
        self.talkTimer.timeout.connect(self.talk)
        self.talkTimer.start(3000)
        # 对话状态设置为常态
        self.talk_condition = 0
        # 宠物对话框
        self.talk()

         其中,通过randomAct实现宠物动作的随机切换,通过talk实现对话框内容的切换,其代码如下:

        self.pet1和self.dialog在初始化的时候即定义了。这里可以按照自己的喜好进行拓展,用多个if-else if实现多种状态的切换和定义,增加一些喂食,玩耍动作等。

 # 随机动作切换
    def randomAct(self):
        # condition记录宠物状态,宠物状态为0时,代表正常待机
        if not self.condition:
            # 随机选择装载在pet1里面的gif图进行展示,实现随机切换
            self.movie = QMovie(random.choice(self.pet1))
            # 宠物大小
            self.movie.setScaledSize(QSize(200,200))
            # 将动画添加到label中
            self.image.setMovie(self.movie)
            # 开始播放动画
            self.movie.start()
        # condition不为0,转为切换特有的动作,实现宠物的点击反馈
        # 这里可以通过else-if语句往下拓展做更多的交互功能
        else:
            # 读取特殊状态图片路径
            self.movie = QMovie(./click/click.gif)
            # 宠物大小
            self.movie.setScaledSize(QSize(200,200))
            # 将动画添加到label中
            self.image.setMovie(self.movie)
            # 开始播放动画
            self.movie.start()
            # 宠物状态设置为正常待机
            self.condition = 0
            self.talk_condition = 0

    # 宠物对话框行为处理
    def talk(self):
        if not self.talk_condition:
            # talk_condition为0则选取加载在dialog中的语句
            self.talkLabel.setText(random.choice(self.dialog))
            # 设置样式
            self.talkLabel.setStyleSheet(
                font: bold;
                font:25pt '楷体';
                color:white;
                background-color: white
                url(:/)
            )
            # 根据内容自适应大小
            self.talkLabel.adjustSize()
        else:
            # talk_condition为1显示为别点我,这里同样可以通过if-else-if来拓展对应的行为
            self.talkLabel.setText(别点我)
            self.talkLabel.setStyleSheet(
                font: bold;
                font:25pt '楷体';
                color:white;
                background-color: white
                url(:/)
            )
            self.talkLabel.adjustSize()
            # 设置为正常状态
            self.talk_condition = 0

⑤ 实现能够拖动宠物,通过多个自带函数实现,其代码配置如下:

        实现宠物的拖动主要通过三个函数实现,mouserPressEvent负责在鼠标点击判断其是否在宠物窗口上,如果在则将宠物和鼠标的位置绑定,并执行点击改变宠物GIF图和对话框的操作。

        mouseMoveEvent实现按下后宠物跟着鼠标移动

        mouseReleaseEvent将之前的锁定取消

 # 鼠标左键按下时,宠物将和鼠标位置绑定
    def mousePressEvent(self,event):
        # 更改宠物状态为点击
        self.condition = 1
        # 更改宠物对话状态
        self.talk_condition = 1
        # 即可调用对话状态改变
        self.talk()
        # 即刻加载宠物点击动画
        self.randomAct()
        if event.button() == Qt.LeftButton:
            self.is_follow_mouse = True
        # globalPos() 事件触发点相对于桌面的位置
        # pos() 程序相对于桌面左上角的位置,实际是窗口的左上角坐标
        self.mouse_drag_pos = event.globalPos() - self.pos()
        event.accept()
        # 拖动时鼠标图形的设置
        self.setCursor(QCursor(Qt.OpenHandCursor))

    # 鼠标移动时调用,实现宠物随鼠标移动
    def mouseMoveEvent(self,event):
        # 如果鼠标左键按下,且处于绑定状态
        if Qt.LeftButton and self.is_follow_mouse:
            # 宠物随鼠标进行移动
            self.move(event.globalPos() - self.mouse_drag_pos)
        event.accept()

    # 鼠标释放调用,取消绑定
    def mouseReleaseEvent(self,event):
        self.is_follow_mouse = False
        # 鼠标图形设置为箭头
        self.setCursor(QCursor(Qt.ArrowCursor))

⑥ 实现宠物右键点击具有交互功能,通过函数contextMenuEvent实现,其代码配置如下:

        退出操作通过 qApp.quit()实现,直接退出相应的QT程序。

        隐藏操作则通过self.setWindowOpacity(0)实现,这个可控制窗口的透明度。

 # 宠物右键点击交互
    def contextMenuEvent(self,event):
        # 定义菜单
        menu = QMenu(self)
        # 定义菜单项
        quitAction = menu.addAction(退出)
        hide = menu.addAction(隐藏)
        # 使用exec_()方法显示菜单。从鼠标右键事件对象中获得当前坐标。mapToGlobal()方法把当前组件的相对坐标转换为窗口(window)的绝对坐标。
        action = menu.exec_(self.mapToGlobal(event.pos()))
        # 点击事件为退出
        if action == quitAction:
            qApp.quit()
        # 点击事件为隐藏
        if action == hide:
            # 通过设置透明度方式隐藏宠物
            self.setWindowOpacity(0)


⑦ 鼠标移到宠物上的时候显示为闭合的手

    # 鼠标移进时调用
    def enterEvent(self,event):
        # 设置鼠标形状 Qt.ClosedHandCursor   非指向手
        self.setCursor(Qt.ClosedHandCursor)

2.3 完整源码

import os
import sys
import random
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *


class DesktopPet(QWidget):
    def __init__(self,self).__init__(parent)
        # 窗体初始化
        self.init()
        # 托盘化初始
        self.initPall()
        # 宠物静态gif图加载
        self.initPetImage()
        # 宠物正常待机,实现随机切换动作
        self.petNormalAction()


    # 窗体初始化
    def init(self):
        # 初始化
        # 设置窗口属性:窗口无标题栏且固定在最前面
        # FrameWindowHint:无边框窗口
        # WindowStaysOnTopHint: 窗口总显示在最上面
        # SubWindow: 新窗口部件是一个子窗口,而无论窗口部件是否有父窗口部件
        # https://blog.csdn.net/kaida1234/article/details/79863146
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.SubWindow)
        # setAutoFillBackground(True)表示的是自动填充背景,True)
        # 重绘组件、刷新
        self.repaint()

    # 托盘化设置初始化
    def initPall(self):
        # 导入准备在托盘化显示上使用的图标
        icons = os.path.join('tigerIcon.jpg')
        # 设置右键显示最小化的菜单项
        # 菜单项退出,点击后调用quit函数
        quit_action = QAction('退出',triggered=self.showwin)
        # 新建一个菜单项控件
        self.tray_icon_menu = QMenu(self)
        # 在菜单栏添加一个无子菜单的菜单项‘退出’
        self.tray_icon_menu.addAction(quit_action)
        # 在菜单栏添加一个无子菜单的菜单项‘显示’
        self.tray_icon_menu.addAction(showing)
        # QSystemTrayIcon类为应用程序在系统托盘中提供一个图标
        self.tray_icon = QSystemTrayIcon(self)
        # 设置托盘化图标
        self.tray_icon.setIcon(QIcon(icons))
        # 设置托盘化菜单项
        self.tray_icon.setContextMenu(self.tray_icon_menu)
        # 展示
        self.tray_icon.show()

    # 宠物静态gif图加载
    def initPetImage(self):
        # 对话框定义
        self.talkLabel = QLabel(self)
        # 对话框样式设计
        self.talkLabel.setStyleSheet(font:15pt '楷体';border-width: 1px;color:blue;)
        # 定义显示图片部分
        self.image = QLabel(self)
        # QMovie是一个可以存放动态视频的类,一般是配合QLabel使用的,r) as f:
            text = f.read()
            # 以\n 即换行符为分隔符,分割放进dialog中
            self.dialog = text.split(\n)

    # 宠物正常待机动作
    def petNormalAction(self):
        # 每隔一段时间做个动作
        # 定时器设置
        self.timer = QTimer()
        # 时间到了自动执行
        self.timer.timeout.connect(self.randomAct)
        # 动作时间切换设置
        self.timer.start(3000)
        # 宠物状态设置为正常
        self.condition = 0
        # 每隔一段时间切换对话
        self.talkTimer = QTimer()
        self.talkTimer.timeout.connect(self.talk)
        self.talkTimer.start(3000)
        # 对话状态设置为常态
        self.talk_condition = 0
        # 宠物对话框
        self.talk()

    # 随机动作切换
    def randomAct(self):
        # condition记录宠物状态,宠物状态为0时,代表正常待机
        if not self.condition:
            # 随机选择装载在pet1里面的gif图进行展示,实现随机切换
            self.movie = QMovie(random.choice(self.pet1))
            # 宠物大小
            self.movie.setScaledSize(QSize(200,200))
            # 将动画添加到label中
            self.image.setMovie(self.movie)
            # 开始播放动画
            self.movie.start()
            # 宠物状态设置为正常待机
            self.condition = 0
            self.talk_condition = 0

    # 宠物对话框行为处理
    def talk(self):
        if not self.talk_condition:
            # talk_condition为0则选取加载在dialog中的语句
            self.talkLabel.setText(random.choice(self.dialog))
            # 设置样式
            self.talkLabel.setStyleSheet(
                font: bold;
                font:25pt '楷体';
                color:white;
                background-color: white
                url(:/)
            )
            # 根据内容自适应大小
            self.talkLabel.adjustSize()
        else:
            # talk_condition为1显示为别点我,这里同样可以通过if-else-if来拓展对应的行为
            self.talkLabel.setText(别点我)
            self.talkLabel.setStyleSheet(
                font: bold;
                font:25pt '楷体';
                color:white;
                background-color: white
                url(:/)
            )
            self.talkLabel.adjustSize()
            # 设置为正常状态
            self.talk_condition = 0

    # 退出操作,关闭程序
    def quit(self):
        self.close()
        sys.exit()

    # 显示宠物
    def showwin(self):
        # setWindowOpacity()设置窗体的透明度,通过调整窗体透明度实现宠物的展示和隐藏
        self.setWindowOpacity(1)

    # 宠物随机位置
    def randomPosition(self):
        screen_geo = QDesktopWidget().screenGeometry()
        pet_geo = self.geometry()
        width = (screen_geo.width() - pet_geo.width()) * random.random()
        height = (screen_geo.height() - pet_geo.height()) * random.random()
        self.move(width,height)

    # 鼠标左键按下时,event):
        self.is_follow_mouse = False
        # 鼠标图形设置为箭头
        self.setCursor(QCursor(Qt.ArrowCursor))


    # 鼠标移进时调用
    def enterEvent(self,event):
        # 设置鼠标形状 Qt.ClosedHandCursor   非指向手
        self.setCursor(Qt.ClosedHandCursor)

    # 宠物右键点击交互
    def contextMenuEvent(self,event):
        # 定义菜单
        menu = QMenu(self)
        # 定义菜单项
        quitAction = menu.addAction(退出)
        hide = menu.addAction(隐藏)
        # 使用exec_()方法显示菜单。从鼠标右键事件对象中获得当前坐标。mapToGlobal()方法把当前组件的相对坐标转换为窗口(window)的绝对坐标。
        action = menu.exec_(self.mapToGlobal(event.pos()))
        # 点击事件为退出
        if action == quitAction:
            qApp.quit()
        # 点击事件为隐藏
        if action == hide:
            # 通过设置透明度方式隐藏宠物
            self.setWindowOpacity(0)


if __name__ == '__main__':
    # 创建了一个QApplication对象,对象名为app,带两个参数argc,argv
    # 所有的PyQt5应用必须创建一个应用(Application)对象。sys.argv参数是一个来自命令行的参数列表。
    app = QApplication(sys.argv)
    # 窗口组件初始化
    pet = DesktopPet()
    # 1. 进入时间循环;
    # 2. wait,直到响应app可能的输入;
    # 3. QT接收和处理用户及系统交代的事件(消息),并传递到各个窗口;
    # 4. 程序遇到exit()退出时,机会返回exec()的值。
    sys.exit(app.exec_())

三、程序打包

3.1 安装pyinstaller

pip install pyinstaller

如果提示黄色提示pip版本问题,照着上面的提示修改即可

 3.2 项目目录下完成打包

        进入打开cmd命令行,进入项目目录,输入命令

pyinstaller -F -w main.py

         打包完成后,在生成的dist里面可以看到main.exe文件


         

        这里因为我自己的原因,需要将main.exe放到主目录下才可正常运行



四、总结与参考资料

4.1 项目百度网盘:

链接:https://pan.baidu.com/s/1YYXzGpmCJkz43tYuki1wFQ 
提取码:3gkw

DeskTopPetEXE为带打包好的文件。

DeskTopPet是打包前的文件。


4.2 总结

写之前挺开心的,写的时候也挺开心的,写完之后就有点索然无味了。用python做一个简单的桌面宠物,我看到的方法除了我参考的这种加载GIF图外:

Python 玩出花儿,把罗小黑养在自己桌面_AI科技大本营的博客-CSDN博客

还有一种通过加载图片帧的方式实现

Python实现桌面宠物_hxxjxw的博客-CSDN博客_python桌面宠物

这种通过图片帧的加载实现,需要编写一个自定义配置类cfg.py,很多人也不把这个东西代码给出来:

'''配置文件'''

ROOT_DIR = 'resources'
ACTION_DISTRIBUTION = [['1','2','3'],['4','5','6','7','8','9','10','11'],['12','13','14'],['15','16','17','18']]


PET_ACTIONS_MAP = {'pet_1': ACTION_DISTRIBUTION}
for i in range(1,4):
   PET_ACTIONS_MAP.update({'pet_%s' % i: ACTION_DISTRIBUTION})

这种方式宠物动作的实现,是根据上面这个配置文件进行配置的,比如[1,2,3]就代表这个pet_1文件夹下对应1,2,3号图片组成一个动作。我看到有人直接把这个当作一个动作赋值给宠物,然后图片就会莫名鬼畜。

纯粹是因为无聊写着玩的,下次再试试能不能弄个3D的

原文地址:https://blog.csdn.net/zujiasheng

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Python中的函数(二) 在上一篇文章中提到了Python中函数的定义和使用,在这篇文章里我们来讨论下关于函数的一些更深的话题。在学习C语言函数的时候,遇到的问题主要有形参实参的区别、参数的传递和改变、变量的作用域。同样在Python中,关于对函数的理解和使用也存在这些问题。下面来逐一讲解。一.函
Python中的字符串 可能大多数人在学习C语言的时候,最先接触的数据类型就是字符串,因为大多教程都是以"Hello world"这个程序作为入门程序,这个程序中要打印的"Hello world"就是字符串。如果你做过自然语言处理方面的研究,并且用Python
Python 面向对象编程(一) 虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程。下面就来了解一下如何在Python中进行对象编程。一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法。 类是对现实世界中一些事物的封装,
Python面向对象编程(二) 在前面一篇文章中谈到了类的基本定义和使用方法,这只体现了面向对象编程的三大特点之一:封装。下面就来了解一下另外两大特征:继承和多态。 在Python中,如果需要的话,可以让一个类去继承一个类,被继承的类称为父类或者超类、也可以称作基类,继承的类称为子类。并且Pytho
Python中的函数(一) 接触过C语言的朋友对函数这个词肯定非常熟悉,无论在哪门编程语言当中,函数(当然在某些语言里称作方法,意义是相同的)都扮演着至关重要的角色。今天就来了解一下Python中的函数用法。一.函数的定义 在某些编程语言当中,函数声明和函数定义是区分开的(在这些编程语言当中函数声明
在windows下如何快速搭建web.py开发框架 用Python进行web开发的话有很多框架供选择,比如最出名的Django,tornado等,除了这些框架之外,有一个轻量级的框架使用起来也是非常方便和顺手,就是web.py。它由一名黑客所创建,但是不幸的是这位创建者于2013年自杀了。据说现在由
将Sublime Text 2搭建成一个好用的IDE 说起编辑器,可能大部分人要推荐的是Vim和Emacs,本人用过Vim,功能确实强大,但是不是很习惯,之前一直有朋友推荐SUblime Text 2这款编辑器,然后这段时间就试了一下,就深深地喜欢上这款编辑器了...
Python中的模块 有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt这个函数,必须用语句"#include<math.h>"引入math.h这个头文件,否则是无法正常进行调用的。那么在Python中,如果要引用一些内置的函数,该怎么处理呢?在Python中
Python的基础语法 在对Python有了基础的认识之后,下面来了解一下Python的基础语法,看看它和C语言、java之间的基础语法差异。一.变量、表达式和语句 Python中的语句也称作命令,比如print "hello python"这就是一条语句。 表达式,顾名思义,是
Eclipse+PyDevʽjango+Mysql搭建Python web开发环境 Python的web框架有很多,目前主流的有Django、Tornado、Web.py等,最流行的要属Django了,也是被大家最看好的框架之一。下面就来讲讲如何搭建Django的开发环境。一.准备工作 需要下载的
在windows下安装配置Ulipad 今天推荐一款轻便的文本编辑器Ulipad,用来写一些小的Python脚本非常方便。 Ulipad下载地址: https://github.com/limodou/ulipad http://files.cnblogs.com/dolphin0520/u...
Python中的函数(三) 在前面两篇文章中已经探讨了函数的一些相关用法,下面一起来了解一下函数参数类型的问题。在C语言中,调用函数时必须依照函数定义时的参数个数以及类型来传递参数,否则将会发生错误,这个是严格进行规定的。然而在Python中函数参数定义和传递的方式相比而言就灵活多了。一.函数参数的
在Notepad++中搭配Python开发环境 Python在最近几年一度成为最流行的语言之一,不仅仅是因为它简洁明了,更在于它的功能之强大。它不仅能够完成一般脚本语言所能做的事情,还能很方便快捷地进行大规模的项目开发。在学习Python之前我们来看一下Python的历史由来,"Pytho
Python中的条件选择和循环语句 同C语言、Java一样,Python中也存在条件选择和循环语句,其风格和C语言、java的很类似,但是在写法和用法上还是有一些区别。今天就让我们一起来了解一下。一.条件选择语句 Python中条件选择语句的关键字为:if 、elif 、else这三个。其基本形式如
关于raw_input( )和sys.stdin.readline( )的区别 之前一直认为用raw_input( )和sys.stdin.readline( )来获取输入的效果完全相同,但是最近在写程序时有类似这样一段代码:import sysline = sys.stdin.readline()
初识Python 跟学习所有的编程语言一样,首先得了解这门语言的编程风格和最基础的语法。下面就让我们一起来了解一下Python的编程风格。1.逻辑行与物理行 在Python中有逻辑行和物理行这个概念,物理行是指在编辑器中实际看到的一行,逻辑行是指一条Python语句。在Python中提倡一个物理行只
当我们的代码是有访问网络相关的操作时,比如http请求或者访问远程数据库,经常可能会发生一些错误,有些错误可能重新去发送请求就会成功,本文分析常见可能需要重试的场景,并最后给出python代码实现。
1.经典迭代器 2.将Sentence中的__iter__改成生成器函数 改成生成器后用法不变,但更加简洁。 3.惰性实现 当列表比较大,占内存较大时,我们可以采用惰性实现,每次只读取一个元素到内存。 或者使用更简洁的生成器表达式 4.yield from itertools模块含有大量生成器函数可
本文介绍简单介绍socket的常用函数,并以python-kafka中的源码socketpair为例,来讲解python socket的运用
python实践中经常出现编码相关的异常,大多网上找资料而没有理解原理,导致一次次重复错误。本文对常用Unicode、UTF-8、GB2312编码的原理进行介绍,接着介绍了python字符类型unicode和str以及常见编解码错误UnicodeEncodeError和UnicodeDEcodeEr