一、Python介绍

1.python擅长领域

    WEB开发:Django. pyramid. Tornado. Bottle. Flask. WebPy
    网络编程:Twisted(牛逼异步网络框架). Requests. Scrapy. Paramiko(模拟SSH)
    科学运算:Scipy.  Pandas(金融). Ipython
    GUI图形开发:wxPython. PyQT. Kivy(做多点触屏)
    运维自动化:OpenStack. SaltStack. Ansible(RedHat两个亿收购). 腾讯蓝鲸

2.运维会开发后可以干什么?

    开发自动化工具,定制开源软件
    帮助评估和优化业务技术架构
    开发内部系统
    做全栈工程师

3.编译型和解释型

    编译型:就是C或C++语言这种,每个源代码文件先又编译器(Compiler)编译为目标文件,目标文件基本已经是可执行代码了,但是由于每个目标文件都是整个项目的一个组成部分,所以还需要另外一个程序将所有的目标文件以及各种资源,例如图标、声音文件等连接起来,该程序叫做链接程序(linker)。链接完成后就可以得到我们所需要的可执行文件,例如Windows下的exe文件。
 
    解释型:与编译型不同的是,翻译的时机不同。编译型类似读一本外语书,先找一个人把其翻译为母语版,然后再阅读。解释型就是一句一句翻译,如果你想回看某个章节,他也得重新给翻译。
    解释型的代码更容易移植。
 
    由于解释型程序是将编译的过程放到执行过程中,这就决定了解释型程序注定要比编译型慢,几百倍的速度差不足为奇。
 
    JAVA:实际上也属于解释型语言,但是JAVA会先把源代码预编译为字节码,字节码是介于机器语言和源代码之间的中间代码。运行的时候有JVM(JAVA虚拟机)来解释执行。他既保留了代码的高抽象、可移植的特点,又完成了对源代码的大部分预编译工作,所以执行起来比纯解释型程序要快许多。

4.动态语言和静态语言

    动态语言:指在运行期间才做数据类型检查的语言,也就是说,在用动态语言编程时,永远不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言。
    静态语言:静态语言与动态语言刚好相反,它的数据类型是在编译期间检查的,也就是说在写程序时就要声明所有变量的数据类型,C/C++是静态语言的典型代表,其他的静态类型语言还有C#、JAVA等。

5.强类型定义语言和弱类型定义语言

    强类型定义语言:强制数据类型定义的语言。也就是说,一旦一个变量被指定为了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型。
    弱类型定义语言:数据类型可以被忽略的语言。一个变量可以赋值不同数据类型的值。
 
    强类型定义语言在速度上可能略逊色于弱类型定义语言,但是强类型定义语言带来的严谨性能有效的避免许多错误。另外,“该语言是不是动态语言”和“该语言是否类型安全”之间是没有联系的。例如,Python是动态语言,是强类型语言。VBScript是动态语言,是弱类型语言。JAVA是静态语言,是强类型语言。

6.Python优缺点

    优点:
  • Python“优雅、明确、简单”,易学。
  • 开发效率高:Python有强大的第三方库,几乎可能支撑你实现任何功能。直接下载挑用后,大大降低开发周期,避免重复造轮子。
  • 高级语言:无需开率内存释放等问题。
  • 可移植性:如果避免使用依赖于系统的特性,那么你的所有Python程序无需修改就可以在几乎所有的系统平台上运行。
  • 可扩展性:如果你需要你的一段关键代码运行得更快,或者某些算法不想公开,你可以把你的部分程序使用C/C++编写,然后在Python中调用他们。
  • 可嵌入性:你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。
    缺点:
  • 速度慢:比C慢很多,但是大多数时候用户是无法直接感知到的。除非你要写对速度要求很高的需求。
  • 代码不能加密:Python是解释型语言,源码明文形式存放,如果项目要求代码是加密的,一开始就不要选择Python来开发。
  • 线程不能利用多CPU优势:由于GIL的存在(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具。Python的线程是操作系统的原生线程,在Linux上为pthread,在Windows上为Win thread。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。

7.Python解释器

    我们编辑.py文本文件。要运行代码就需要Python解释器去执行.py文件。
    
    种类:
  • CPython:Linux自带的解释器,例如Pyhton2.7。就是一个CPython,这个解释器是用C语言开发的,所以叫CPython。CPyhton是使用最广的Python解释器,教程的所有代码都在CPython上运行。
  • IPython:CPython基础上的一个交互解释器。
  • PyPy:目标是执行速度。采用JIT(即时编译技术),对Python代码进行动态编译(注意不是解释),所以可以显著提高Python的执行速度。绝大部分Python代码都可以在PyPy下运行,但是和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解与CPython之间的不同点。
  • Jython:是运行在JAVA平台上的Python解释器,可以把Python代码编译成JAVA字节码。

8.Pyhton2.x和Pyhton3.x

    Pyhton2.7只支持到2020年。Python3.x与Python2.x之间的最大的变动在于,Python3.x支持Unicode,即直接直接使用中文。某些库改名了。Django已经支持3.x,Twisted是一个牛逼的异步网络框架,目前还不支持3.x。 

二、Hello World

 #!/usr/bin/env python
print("hello world!")
    当该.py文件需要修改权限为可执行文件时(Linux下),则必须在文件开始加上#!/usr/bin/env python,类似shell脚本。或者写为#!/usr/bin/python。前者是查找环境变量,后者是写死找某个目录里的,推荐使用前者。如何使用前者,安装一个python,然后在环境变量中变为默认的Python,使用前者就可以了。

三、开发工具

PyCharm工具
 
    默认模板配置:即在每个py文件的最前面自动添加信息。
    如何配置:在File下的Setting,或者在View下打开toolbar,点击Setting进入配置界面,然后在Editor下的File and Code Template选择Python Script文件,在右边的编辑栏中填入你要默认生成的模板信息。
    配置开发工具的编码:在setting里,Editor->File Encodings,Default encoding for properties files默认为GBK,修改为UTF-8。将顶部的Project Encoding也修改为UTF-8。

四、变量

    eg.1:
name = "Leo Zheng"
name2 = name
name = "Jack Chen"
print(name , name2)
    打印结果:Jack Chen Leo Zheng
    分析:print中的逗号,用于分割name和name2,为空格。和print(name+name2)不同,后者没有分割空格。
    内存分析:首先name变量指向内存中存放的"Leo Zheng",当name2=name时,name2也指向内存中的该值。然后name="Jack Chen"时,name指向了另一块内存存放的"Jack Chen",但name2还是指向的"Leo Zheng"。
 
    变量定义规则:变量名只能是字母、数字或下划线的任意组合,变量名的第一个字符不能是数字,中间不能有空格,不能有特殊字符。关键字不能作为变量名,例如“and”“as”“assert”“if”“else”等等。
    约定俗成:不要用中文做变量名(虽然可以),不要使用拼音,不要使用无愿意字符比如a、a1等。使用gf_of_leo比较好,leo的女朋友,官方建议。
 
    变量和常量:Python中没有常量的概念,使用全部大写来表示常量(但是是可以修改的),例如圆周率PIE=3.1415926。

五、字符编码

    ASCII码(美国标准信息交换代码):最多只能使用8bit,256个代码。包含大写小写字母、数字和一些特殊字符。先使用了128个,预留了128-255。
    GB2312:1980年诞生,7000多个汉字,利用ASC码中预留的128-255之间的部分形成索引,然后另外指定一张中文表,即GB2312。
    GBK1.0:1995年诞生,兼容GB2312,扩展了2W多个。
    GB18030:2000年诞生,收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等少数民族文字。
    都是向下兼容的。
    Windows缺省内码是GBK,可以通过GB18030包升级到GB18030。
 
    Unicode:90年代初,由于除了中国,还有日本韩国,GBK无法与其他语言兼容,则出现了万国码Unicode。Unicode占16bit。
    Utf-8:可变长度的Unicode。所有的英文字符实际上存的是ASCII码为1个字节,存中文会使用3个字节
    
    Python3.x默认使用utf-8处理字符,Pyhton2.x中无法字节处理中文,默认使用ASCII码处理。若要处理中文,需要在每个py文件前面加上# -*- coding:utf-8 -*-

六、注释

    #:使用#注释单行代码,
    """  """:使用"""   """注释多行代码。还可以使用"""  """赋值给一个变量,代表一个多行的变量。
    
    在Python中,单引号和双引号是一样的,除了一种情况,即引号嵌套的时候。例如" ' hello' "或' " World " '。
 
 注:单引号、双引号可互相嵌套,前提是不发生混淆。

七、文本输入

username = input("UserName:")
password = input("Password:")
print(username,password)

1.文本格式化

    方式一:
mes = """
---------info---------
username : %s
password : %s
""" % (username,password)
    %s代表格式化string,%d格式化数字,%f代表浮点。
    
    方式二:
mes = """
---------info---------
username : {_username}
password : {_password}
""".format(_username = username,_password = password)
print(mes) 
    方式三:
mes = """
---------info---------
username : {0}
password : {1}
""".format(username,password)
print(mes)
    建议使用方法一和方法二,还有一种字符串拼接法,不要使用,因为内存开辟的空间更多,而且不直观。

八、判断分支

_username = "zhengzhu"
_passwd = "abc123"
username = input("Username : ")
passwd = input("Password : ")
if username == _username and passwd == _passwd:
print("Right")
else:
print("Error")
    Python是强制缩进的。
    ==代表等于,=代表赋值。

九、循环

1.while循环

age_of_me = 31
count = 0
while count < 3:
guess_age = input("Guess my Age : ")
guess_age = int(guess_age)
if guess_age > age_of_me:
print("大了")
elif guess_age < age_of_me:
print("小了")
else:
print("对了")
break
count += 1

尝试次数过多的情况:

age_of_me = 31
count = 0
while count < 3:
guess_age = input("Guess my Age : ")
guess_age = int(guess_age)
if guess_age > age_of_me:
print("大了")
elif guess_age < age_of_me:
print("小了")
else:
print("对了")
break
count += 1
else:
print("you have tried too many times..fuck off")

2.for循环

for i in range(10):
print(i)

其中i为临时变量,range(10)是0,1,2,3,4,5,6,7,8,9。

age_of_me = 31
count = 0
for i in range(3):
guess_age = input("Guess my Age : ")
guess_age = int(guess_age)
if guess_age > age_of_me:
print("大了")
elif guess_age < age_of_me:
print("小了")
else:
print("对了")
break
else:
print("you have tried too many times..fuck off")
for i in range(2,10,3):
print("loop :", i)

range(0,10,2)表示从0-9,隔一个数打印一次。range(start,stop,步长)。

 

最新文章

  1. Create views of OpenCASCADE objects in the Debugger
  2. tomcat之一:指定tomcat运行时JDK版本
  3. [NHibernate]并发控制
  4. 转载:JAVA中关于set()和get()方法的理解及使用
  5. springmvc学习第一天
  6. Maven学习总结(三)——使用Maven构建项目
  7. ASP.NET5 MVC6入门教学之一(自己动手)
  8. PHP+ajax聊天室源码!支持长轮循跟定时请求两种
  9. 判断文件结束,feof……
  10. demo_07选择器练习
  11. UItexfile实时验证输入字符
  12. List去重
  13. java导出word
  14. DAY16、模块和包
  15. 吴裕雄 python 机器学习——Lasso回归
  16. jTimer
  17. xshell远程终端操作Ubuntu server安装LAMP环境之最详细笔记之二PHP开发环境配置
  18. intellij idea 搜索功能快捷键
  19. CentOS 7下宿主机使用virsh console访问KVM的设置
  20. 十大开源ERP点评 献给深水区的中小企业和CIO们

热门文章

  1. Java--数组和链表的区别以及使用场景
  2. Android 事件分发机制具体解释
  3. Linux性能测试 ps命令
  4. 熵、交叉熵、相对熵(KL 散度)意义及其关系
  5. Cocos2d-x移植WP8时间CCScrollView问题
  6. WPF字体图标——IconFont
  7. Mybatis 一对多 配置文件
  8. 如何完全备份android在系统system分区和data分
  9. 1 min 数据查询 SQL 优化
  10. 数据绑定(六)使用XML数据作为Binding的Source