[Python自学] day-1 (介绍、格式化、分支循环)

一、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

1 #!/usr/bin/env python
2 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,步长)。
 
posted @ 2017-09-20 17:07  风间悠香  阅读(341)  评论(0编辑  收藏  举报