一、学习python有一段时间了,总体上手还是挺好的,但是有些东西还是和Java存在着一定的区别,这里主要是通过学习,然后自己去编写一个案例。从中学习到的一些东西,这里分享出来,如果存在不正确的地方还请指出,因为刚学可能认识的还不够清楚。这里主要是记录一下自己在实际开发过程中遇到的一些问题,总结出来。

  二、和Java存在的区别的地方

  1)导包

  JAVA中的import,直接导入的是class,或者改包下的所有class 文件,最小单位就是class

  

  python的import

  a、如果需要从其他地方导包,需要在包里面加入__init__.py文件

  

  b、另外需要在__init__.py,加入需要外部引用的文件或者具体的class

  

  注意:这里导入的不是class,而是文件,至于里面存在几个class,这个都是不定的

  c、文件中可以存在不同的东西,比如方法、公共属性、class等等

  

  d、调用:所有的调用必须引入具体的东西,或者该文件下的所有东西(*)

  

  注意:是具体的class,不是文件(这里我踩过坑的,和Java存在的比较明显的区别)。并且必须要在需要引入的包内的__init__.py加入导入,才可以使用

  2)路径

  一般我们在使用文件调用的时候都使用相对路径,因为python没有classpath所以我安装文件的相对路径来写,但是会出现错误

  

  如果开始运行的是main.py,而你在domain包下使用../images/**,这里就存在找不到文件的问题

  这里的路径是以运行文件为基准路径应该是:./images/**

  这里也是我菜过的坑

  3)变量

  python的局部变量,不用多解释,和Java差不多,只是不需要声明而已。

  全局变量:

  因为python的最小单位不是class了,所以我们在使用的使用可以存在几种方式

  a、独立变量(文件内,不在任何class,或者方法内)

  

  b、类全局变量(这里如果函数需要使用,必须要加global声明,否者报错)

  

  4)函数(方法):

  python中是没有static的内置标志的,但是存在几种注解

  a、@staticmethod,这种凡是基本和类方法是一样的

  b、@classmethod,这一种其实最开始我也没有理解到,不过在用的时候体会到了,@classmethod,有参数不是self,而是class本身

  5)变量/函数作用域

  a、__(两个下划线)代表改变量/函数的变量私有,这里调用的时候没有报错,依然可以执行,但是存在一个问题,根本不能修改里面的属性(这个坑主要是在使用线程退出的时候,发现的)。

  

  b、_(单下划线)不同通过发from ** import **导入

  c、__func__(左右下划线)内部方法

  6)线程和进程

  a、python和Java的区别

  这里简单说一下,我理解的而不是很深。

  (1)python的多线程不是真正意义上的多线程,因为它只能单核执行,Java可以

  (2)python的线程池不是为了避免线程频繁创建而生的,而是多任务执行而生的,Java不是全是。

  (3)python存在multiprocessing(多进程库),python可以通过多进程的方式来达到多核的调用,Java,实际没有多进程这一说,但是可以通过Runtime.getRuntime().exec(...)来实现(不建议)。

  总结:

  有这样一种说法: CPU 密集型,建议使用多进程。而多线程就更适合应用于 I/O 密集型程序。意思就是计算多采用多进程,读写多使用多线程。

  7)锁(这里简单介绍)

  声明:lock = threading.Lock()

  锁定:lock.acquire([timeout])

  解锁:lock.release()

  锁的使用,这里不介绍。但是python中要注意死锁的情况

  8)多进程的使用

  p = multiprocessing.Process(target = func, args = (*,*))
  p.start()
  target:函数
  args:为传入函数的参数,使用元祖的方式传入

  多进程池:

  # 声明长度
  pool = multiprocessing.Pool(processes=4)
  # 非阻塞
  pool.apply_async(func, (*, *))
  # 阻塞
  pool.apply(func, (*, *))
  pool.close()
  pool.join()

  9)多线程的使用

thread.start_new_thread ( function, args[, kwargs] )
threading.Thread( function, args[, kwargs] )
  • threading.currentThread(): 返回当前的线程变量。
  • threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
  • threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。

除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了以下方法:

  • run(): 用以表示线程活动的方法。
  • start():启动线程活动。
  • join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
  • isAlive(): 返回线程是否活动的。
  • getName(): 返回线程名。
  • setName(): 设置线程名。

  多线程池:

pool = threadpool.ThreadPool([size]) # [size]表示线程池同时容纳的线程数
requests = threadpool.makeRequests(some_callable, list_of_args, callback) # some_callable表示调用函数名, list_of_args表示传递参数列表, callback表示回调函数
[pool.putRequest(req) for req in requests] # 表示将请求队列中的元素全部放进线程池统一管理
pool.wait() # 表示所有请求结束后,结束进程

  三、实战总结

  这里就是学习基础,然后实战开发做的一个简单的东西(飞机大战)

  目录:

  

  效果:

  

  源码:https://github.com/lilin409546297/python_planeWar

  本源码并不完善,有需要可以自己改进。自己的编写,采用了Java的一些编写思路,有不足的地方请指出!!!

python之基础总结(飞机大战)的更多相关文章

  1. 十、Python练习----基础搭建飞机大战

    只是简单的学习了pygame,实现飞机的摧毁还需要多张图片的切换,和sprite(碰撞精灵),还有多种音效的添加(如背景音乐.摧毁特效).以后再深入学习我只是练习一下python. 一.搭建界面(基于 ...

  2. Python之游戏开发-飞机大战

    Python之游戏开发-飞机大战 想要代码文件,可以加我微信:nickchen121 #!/usr/bin/env python # coding: utf-8 import pygame impor ...

  3. 小甲鱼python基础教程飞机大战源码及素材

    百度了半天小甲鱼python飞机大战的源码和素材,搜出一堆不知道是什么玩意儿的玩意儿. 最终还是自己对着视频一行行代码敲出来. 需要的同学点下面的链接自取. 下载

  4. Python小游戏之 - 飞机大战美女 !

    用Python写的"飞机大战美女"小游戏 源代码如下: # coding=utf-8 import os import random import pygame # 用一个常量来存 ...

  5. 500行代码,教你用python写个微信飞机大战

    这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手. 帮助蹲厕族.YP族.饭圈女孩在无聊之余可以有一样东西让他们振作起来!让他们的左手 / 右 ...

  6. Python小游戏之 - 飞机大战 !

    用Python写的"飞机大战"小游戏 源代码如下: # coding=utf-8 import random import os import pygame # 用一个常量来存储屏 ...

  7. 猜数字和飞机大战(Python零基础入门)

    前言 最近有很多零基础初学者问我,有没有适合零基础学习案例,毕竟零基础入门的知识点是非常的枯燥乏味的,如果没有实现效果展示出来,感觉学习起来特别的累,今天就给大家介绍两个零基础入门的基础案例:猜数字游 ...

  8. Python版飞机大战

    前面学了java用java写了飞机大战这次学完python基础后写了个python版的飞机大战,有兴趣的可以看下. 父类是飞行物类是所有对象的父类,setting里面是需要加载的图片,你可以换称自己的 ...

  9. 一、利用Python编写飞机大战游戏-面向对象设计思想

    相信大家看到过网上很多关于飞机大战的项目,但是对其中的模块方法,以及使用和游戏工作原理都不了解,看的也是一脸懵逼,根本看不下去.下面我做个详细讲解,在做此游戏需要用到pygame模块,所以这一章先进行 ...

随机推荐

  1. mysql 日期总结

    select to_days(now()) #737733 select date_format(now(),'%Y-%m-%d') #2019-11-05 select CURRENT_DATE() ...

  2. docker 安装redis 并配置外网可以访问

    1, docker 拉去最新版本的redis docker pull redis #后面可以带上tag号, 默认拉取最新版本 2, docker安装redis container 安装之前去定义我们的 ...

  3. 网络通信技术中的中继器repeater

    1. repeater的作用 对信号进行再生和还原 2. repeater的优点 延长通讯距离 提高可靠性 增加节点的最大数目 各个网段可以使用不同的通讯速率 3. repeater的缺点 增加了延时 ...

  4. 【转】把sqlite3数据导入到MySQL中

    之前我们默认使用的是SQLite数据库,我们开发完成之后,里面有许多数据.如果我们想转换成Mysql数据库,那我们先得把旧数据从SQLite导出,然后再导入到新的Mysql数据库里去. 1.SQLit ...

  5. idea 配置文件中文显示问题

    配置文件中的中文,有时候会显示异常,因此需要修改文件编码格式修改.下面红框位置需要勾选上.

  6. java 读取CSV数据并写入txt文本

    java 读取CSV数据并写入txt文本 package com.vfsd; import java.io.BufferedWriter; import java.io.File; import ja ...

  7. ES6深入浅出-10 ES6新增的数据类型-2.Set与数组去重

    一种新的数据类型,它是对象的一种,Set,很像数组,又不是数组. Set 类型 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Refe ...

  8. 转 How to Resolve ORA-16009: remote archive log destination must be a STANDBY

    ###sample A primary B STANDBY C STANDBY   问题A 库一直报错 ORA-16009: remote archive log destination must b ...

  9. 迅速解决!!!!!启动Tomcat报错PermGen space

    启动Tomcat报错   PermGen space    内存溢出 解决方法:扩大tomcat内存 修改参数:set JAVA_OPTS=-Xms1024m -Xmx1024m -XX:PermSi ...

  10. 背诵四种清净明诲断淫(愿众生断淫得究竟解脱) (转自学佛网:http://www.xuefo.net/nr/article50/495158.html)

    一.为什么要戒邪淫.断淫欲 <寿康宝鉴>:盖淫念一生,诸念皆起.邪缘未凑生妄心;勾引无计,生机械心;少有阻碍,生嗔恨心;欲情颠倒,生贪着心;羡人有之,生嫉妒心;夺人之爱,生杀害心.廉耻丧尽 ...