Python(一)-基础不牢,地动山摇

第1章 Python介绍

1.1 python应用领域

  python能够应用于众多领域,如:数据分析、组件集成、网络服务、图像处理、数值计算和科学计算等众多领域,目前业内几乎全部大型互联网企业都在时用python。java

1.1.1 目前python主要领域

  • 云计算:云计算最火的语言,典型应用openstack。
  • WEB开发:众多优秀的web框架,众多大型网站均为python开发,典型web框架Django。
  • 科学运算、人工智能:典型开发库numpy、scipy、matplotlib、enthought、libarys、pandas等。
  • 系统运维:自动化开发。
  • 金      融:量化交易、金融分析,不只仅在用python,还在逐年提升,缘由就是做为动态语言的python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c、c++、java,尤为是擅长策略回测。

1.2 python是一门什么样的语言?

  编程语言主要从如下几个角度进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言,每一个分类表明的意思以下:python

1.2.1 编译和解释的区别

  由于计算机不能直接认识并执行咱们写的语言代码,它只能认识机器语言,既0、1代码二进制的形式。linux

  一、编译器

   是吧源代码的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机能够直接以计算机语言来运行此程序,速度很快。c++

   举个栗子:中国人和美国人对话,因为语言的不通,须要一个翻译,中国人有钱就雇一个翻译来进行翻译语言,即这个翻译就是编译器,中国人每说一次过后,翻译官是将中国人全部说的话提早翻译好成英文,并写在文件中,而后交给美国人看,这样美国人就很快的而且以母语的形式方便看完。这就叫编译型,一次性提早编译好。web

  二、解释器

   解释器是在执行程序时,才一条一条的解释成机器语言给计算机逐一执行,因此运行速度相对编译后的程序运行的慢。算法

   举个栗子:仍是一个中国人和美国人,在交流的时候在现场有个翻译官,中国人说一句,翻译官翻译一句,即翻译官就是解释器。编程

1.2.2 低级语言和高级语言

  一、低级语言

   一句话说,低级语言就是面向机器、更接近底层的语言。c#

   即0、1序列表示的机器指令都是用来符号助记,这些与机器指令一一对应的助记符就时汇编指令,不管是机器指令仍是汇编指令都是面向机器的,统称为低级语言。windows

  二、高级语言

   一句话说,高级语言就是面向人类思惟逻辑开发的语言。浏览器

   抽象程度大大提高,须要通过编译成特定机器的汇编代码才能执行,一条高级语言的语句每每须要若干机器指令来完成,高级语言独立于机器的特性是靠编译器为不一样机器生成不一样的目标代码(或机器指令)来实现的,那具体的说,要将高级语言编译到什么程度呢?这要跟编译技术有关了,既能够编译成直接可执行多目标代码,也能够编译成一种中间表示,而后拿到不一样的机器和系统上执行,这种状况一般又须要支撑环境,好比解释器或虚拟机的支持,java程序编译成bytecode,再由不一样平台的虚拟机执行就是很好的例子,而经过编译器解释的到多目标代码去适应不一样的机器,从这个意义上来讲,经过交叉汇编,一些汇编程序也能够得到不一样机器的可移植性,但这种途径的可移植性远远不一样高级语言来的方便和实用性大。

  三、低级语言与高级语言小结

  • 低级语言是更接近底层的语言。
  • 高级语言是更接近人类思惟逻辑的语言。
  • 计算机只识别0、1代码,而人类有本身的语言,所以须要编译器或解释器来编译成0、1代码或者中间语言。

1.2.3 动态语言和静态语言

   一般咱们所说的动态语言、静态语言是指动态类型语言和静态类型语言。

  一、动态类型语言

   动态类型语言是指在运行期间才去作数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来,python和ruby就是这种典型的动态类型语言。

  二、静态类型语言

   静态类型语言与动态类型语言恰好相反,它的数据类型在编译期间检查的,也就是说在程序时要声明全部变量的数据类型,c、c++是静态类型语言的典型表明,其余的静态类型语言还有c#、java等。

1.2.4 强类型定义语言和弱类型定义语言

  一、强类型定义语言

   强制数据类型的语言,也就是说,一旦一个变量被指定了某个数据类型,若是不通过强制转换,那么他就永远是这个类型,举个栗子:若是你定义了一个整型变量a,那么程序根本不可能将a看成字符串类型处理,强类型定义语言是类型安全的语言。

  二、弱类型定义语言

   数据类型能够被忽略的语言,它与强类型定义语言相反,一个变量能够复制不一样数据类型的值。

1.2.5 python总结

  python时动态语言,强类型定义语言。

1.3 python的优缺点

1.3.1 python的优势

  一、简单明确

   python定位就是优雅、明确、简单,因此python程序看上去老是简单易懂,初学者python,不但入门容易,并且未来深刻下去,能够编写哪些很是复杂的大程序。

  二、开发效率很是高

   python有很是强大的第三方库,基本上你想经过计算机实现任何功能,python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大下降开发周期,避免重复造轮子。

  三、高级语言

   当你用python语言编写程序的时候,你无需考虑诸多如何管理你的程序使用等内存一类的底层细节。

  四、可移植性

   因为它对开源本质,python已经被移植到许多平台上,(通过改动使它可以工做在不一样平台上。)

  五、可扩展性

   若是你须要你的一段关键代码运行的更快活着但愿某些算法不公开,你能够把你的部分程序用c或者c++编写,而后再你的python程序中使用。

  六、可嵌入性

   你能够把python嵌入你的c/c++程序中,从而醒你对程序用户提供脚本功能。

1.3.2 python缺点

  一、速度慢

   python的运行速度相比c语言确实慢不少,跟java相比也要慢一些,可是python的慢通常用户是没法直接感知到的,而且如今不断的完善。

  二、代码不能加密

   由于python是解释性语言,它的源码都是以明文对形势存在的。

  三、线程问题

   线程不能利用多cpu问题,GIL(global interpreter lock)即全集解释器锁,是计算机程序设计语言解释器用语同步线程的工具,使得任什么时候刻仅有一个线程在执行,python的线程时操做系统的原成线程,在linux上为pthread,在windows上为win thread,彻底由操做系统调度线程的执行,一个python解释器进程内有一条主线成,以及多用户程序执行线程,即便在多核CPU平台上,因为GIL的存在,因此禁止多线程的并行执行,关于这个问题的折衷解决方法。

1.4 python解释器

     当咱们编写python代码时,咱们获得的是一个包含python代码的以.py为扩展名到文本文件,要运行代码,就须要python解释器去执行.py文件。

     因为整个python语言从规范到解释器都是开源的,因此理论上,只要水平够高,任何人均可以编写python解释器来执行python代码,事实上,确实存在不少种python解释器。

  一、CPython

     当咱们从python官方网站下载并安装好python2.7后,咱们就直接得到来一个官方版本的解释器CPython,这个解释器使用c语言开发,因此叫cpython,在命令行训醒python就是启动cpython解释器。

   cpython是使用最为普遍的python解释器。

  二、IPython

     IPython是基于cpython之上多个交互式解释器,也就是说,IPython只在交互式上有所加强,可是执行python代码的功能和cpython是彻底同样的,比如不少国家浏览器虽然外观不一样,但内核其实都是调用了ie。

  cpython用>>>做为提示符,而IPython用In[序号]:做为提示符。

  三、pypy

     pypy是另外一种python解释器,他的目的是执行速度,pypy采用jit技术,对python代码进行动态编译(注意不是解释),因此能够显著提升python代码到执行速度。

  绝大部分python代码均可以在pypy下运行,可是pypy和cpython有一些是不一样的,这就致使形同的python代码在两种解释器下执行可能会有不一样的结果,若是你的代码要放在pypy下执行,就须要了解pypy和cpython的同点。

  四、Jython

     Jython是运行在java平台上的python解释器,能够直接把python代码编译成java字节码执行。

  五、ironpython

     ironpython和jython相似,只不过是运行在微软.net平台的python解释器,能够直接把python代码编译成.net字节码。

1.4.1 python解释器小结

  python的解释器不少,但使用最普遍的仍是cpython,若是要和java或者.net平台交互,最好的办法不是用jython或者ironpython,而是经过网络调用来交互,确保各程序之间的独立性。

第2章 Python简单基础

2.1 变量

  一、变量的定义

   变量是一个在内存存储的数据。

  二、变量的意义

   为何要有变量,由于他保存程序的中间结果或状态,以供应后面的代码进行调用。

2.1.1 变量的要求定义

  一、等号右边永远是变量名

  二、打印字符串时使用双引号

  三、打印时的分隔符使用逗号

  四、在变量中数字不须要加引号,加引号就变成字符串了

  五、python是由上到下逐行(hang)处理执行的,所以变量要先定义好再调用

2.1.2 定义变量的方式

  一、定义变量简洁化标准:强烈推荐“_”下划线,其次也能够是用驼峰表示法。

  二、变量不可所有大写,所有大写为常量,常量是永远不变的变量,若是程序中有永远不变的量,可使用大写来暗示别人或提醒本身。

  三、变量不能以数字开头,数字能够在变量名的中间。

  四、变量名不能使用特殊字符,仅除下划线。

  五、不能使用关键字做为变量名,关键字就是程序内部语法,如:print等。

2.1.3 变量赋值实例

  一、正确打印

1 #!/usr/bin/env python3
2 name = "chenx"
3 name2 = "oldboy"
4 print name,name2
输出结果:
chenx oldboy

  二、错误打印

1 #!/usr/bin/env python3
2 name = "chenxin"
3 name2 = "oldboy"
4 print "name,name2"
输出结果:
name,name2
 

  备注:变量饮用不可以使用引号引用。

2.2 字符编码

  因为计算机只能识别0、1代码,所以字符编码由2**8表示,每一个字符有8个比特位,一个二进制数字占1比特bit,所以一个字符有8比特,即1字节,加入各国符号后出现了万国编码(unicode),每一个字符有4字节,最后演变成utf-8,可变长的编码集,英文按照ascll存储,一个字符为1字节,一个中文存3字节,欧洲2字节。

  python的开发规范,每行不能超过80个字符。

  python2默认不支持中文,python3版本以上使用了utf-8,默认就支持中文,若是是python2必须在代码中作字符集的声明:

1 #!/usr/bin/env python2
2 # _*_ coding: utf-8 _*_
3 print ("你好")

2.3 交互式输入

2.3.1 python3.0中

1 #!/usr/bin/env python
2 name = input("what is your name:") 3 print ("holle" + name)

2.3.2 python2.0中

  raw_input就是3.0中点input。

  可是在2.0中也有一个input,这个input不能输入字符串,只能输入变量和数字。(没什么卵用。)

2.3.3 格式化输出占位符

#!/usr/bin/env python
name = input("your name :") age = int(input("your age :")) job = input("your jpb :") meg = ''' 这是%s的基本信息。 ------------------- name : %s age : %d job : %s ---------end----- ''' % (name,name,age,job) print(meg)

  小结:

  %s:表示输出字符串

  %d:表示输出整数

  %f:表示输出浮点数(小数)

2.4 经常使用模块使用

2.4.1 getpass

#!/usr/bin/env python
import getpass username = input("usename:") password = getpass.getpass("password:") print(username,password)

  备注:getpass模块使密码变成不可见形式体现,可是在pycharm中很差使,只能在命令行中使用。

2.4.2 os

  一、模块方法

   os.system()   :直接调用系统命令

   os.mkdir()    :在python脚本或进入pyrhon的目录下建立目录

   os.popen("df -h").read()  保存输出结果

  二、模块实践

#!/usr/bin/env python3
import os os.mkdir("python_mkdir") os_system = os.system("ls") print(os_system) os_popen = os.popen("df -h").read() print(os_popen)
输出结果: {0:21}~/s15/scripts ➭ python3 os.py 1.txt openfile.py os.py python_mkdir test_1.py 0 Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/disk1     112Gi  109Gi  2.9Gi    98% 28568128 753598   97%   / devfs 182Ki 182Ki 0Bi 100%      630      0  100%   /dev map -hosts       0Bi    0Bi    0Bi   100%        0      0  100%   /net map auto_home 0Bi 0Bi 0Bi 100%        0      0  100%   /home

2.4.3 sys

  一、模块方法

   sys.path  :查看python默认存放模块的路径(全局环境变量)

  二、模块实践

#!/usr/bin/env python3
import sys print(sys.path)
直接结果: {0:26}~/s15/scripts ➭ python3 sys.py ['/Users/cx/s15/scripts', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python35.zip', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/plat-darwin', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages']

2.4.4 python命令行补全模块

  一、for mac

import sys import readline import rlcompleter if sys.platform == 'darwin' and sys.version_info[0] == 2: readline.parse_and_bind("bind ^I rl_complete") else: readline.parse_and_bind("tab: complete")  # linux and python3 on mac

  二、for linux

#!/usr/bin/env python  # python startup file 
import sys import readline import rlcompleter import atexit import os # tab completion 
readline.parse_and_bind('tab: complete') # history file 
histfile = os.path.join(os.environ['HOME'], '.pythonhistory') try: readline.read_history_file(histfile) except IOError: pass atexit.register(readline.write_history_file, histfile) del os, histfile, readline, rlcompleter

  备注:将自定义模块放在统一的python默认环境变量下,并随便命名便可,以备后面方便调用。

2.5 if判断语句

  一、简单用户登陆判断

#!/usr/bin/env python
user = 'chenx' passwd = 'cx199222814' username = input("username:") password = input("password:") if user == username: print("username is correct...") if password == passwd: print("welcom to...") else: print("密码错误") else: print("用户名错误"

  二、登陆优化代码

#!/usr/bin/env python
user = 'chenxin' passwd = 'cx1994814' username = input("username:") password = input("password:") if user == username and password == passwd: print("欢迎使用") else: print("用户名密码错误")

  三、猜年龄代码(联合判断)

#!/usr/bin/env python
age = 21 age_num = int(input("input your age:")) if age == age_num: print("回答正确") elif age > age_num: print("猜小了") else: print("猜大了")

2.6 for循环

  一、猜年龄循环不能超过三次

#!/usr/bin/env python
age = 21
for i in range(10): if i <3 :    #循环判断不能超过三次
        age_num = int(input("input your age:")) if age == age_num: print("回答正确") break
        elif age_num < age: print("猜小了") else: print("猜大了") else: print("猜想次数太多,你太笨了。。。") break

  二、猜年龄代码优化v2

#!/usr/bin/env python
age = 21 counter = 0 for i in range(10): print("---->counter:",counter) if counter <3: #循环判断不能超过三次
        age_num = int(input("input your age:")) if age == age_num: print("回答正确") break #终止整个循环,
        elif age > age_num: print("猜小了") else: print("猜大了") else: conuter_confim = input("你是否确认继续猜y/n?") if conuter_confim == "y": counter = 0 continue #跳出当次循环
        else: exit("再见笨蛋") counter += 1 #counter = counter +

 

2.6 while循环

    有一种循环叫死循环,一经触发,就运行个天荒地老、海枯石烂。

2.6.1 海枯石烂代码

count = 0
while True:
    print("你是风儿我是沙,缠缠绵绵到天涯...",count)
    count +=1

2.6.1 循环100次的代码

count = 0
while True:
    print("你是风儿我是沙,缠缠绵绵到天涯...",count)
    count +=1
    if count == 100:
        print("去你妈的风和沙,大家这些脱了裤子是人,穿上裤子是鬼的臭男人..")
        break

2.6.1 循环到3次终止的代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
my_age = 20

count = 0
while count < 3:
    user_input = int(input("input your guess num:"))

    if user_input == my_age:
        print("Congratulations, you got it !")
        break
    elif user_input < my_age:
        print("Oops,think bigger!")
    else:
        print("think smaller!")
    count += 1  # 每次loop 计数器+1
else:
相关文章
相关标签/搜索