一、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,步长)。

 

Python自学day-1的更多相关文章

  1. python自学笔记

    python自学笔记 python自学笔记 1.输出 2.输入 3.零碎 4.数据结构 4.1 list 类比于java中的数组 4.2 tuple 元祖 5.条件判断和循环 5.1 条件判断 5.2 ...

  2. Python - 自学django,上线一套资产管理系统

    一.概述 终于把公司的资产管理网站写完,并通过测试,然后上线.期间包括看视频学习.自己写前后端代码,用时两个多月.现将一些体会记录下来,希望能帮到想学django做web开发的人.大牛可以不用看了,小 ...

  3. 拎壶冲冲冲专业砸各种培训机构饭碗篇----python自学(一)

    本人一直从事运维工程师,热爱运维,所以从自学的角度站我还是以python运维为主. 一.python自学,当然少不了从hello world开始,话不多说,直接上手练习 1.这个可以学会 print( ...

  4. [Python自学] day-21 (2) (Cookie、FBV|CBV装饰器)

    一.什么是Cookie 1.什么是Cookie? Cookie是保存在客户端浏览器中的文件,其中记录了服务器让浏览器记录的一些键值对(类似字典). 当Cookie中存在数据时,浏览器在访问网站时会读取 ...

  5. [Python自学] day-21 (1) (请求信息、html模板继承与导入、自定义模板函数、自定义分页)

    一.路由映射的参数 1.映射的一般使用 在app/urls.py中,我们定义URL与视图函数之间的映射: from django.contrib import admin from django.ur ...

  6. [Python自学] day-20 (Django-ORM、Ajax)

    一.外键跨表操作(一对多) 在 [Python自学] day-19 (2) (Django-ORM) 中,我们利用外键实现了一对多的表操作. 可以利用以下方式来获取外键指向表的数据: def orm_ ...

  7. [Python自学] day-19 (2) (Django-ORM)

    一.ORM的分类 ORM一般分为两类: 1.DB first:先在DB中创建数据库.表结构,然后自动生成代码中的类.在后续操作中直接在代码中操作相应的类即可. 2.Code first:直接在代码中实 ...

  8. [Python自学] day-19 (1) (FBV和CBV、路由系统)

    一.获取表单提交的数据 在 [Python自学] day-18 (2) (MTV架构.Django框架)中,我们使用过以下方式来获取表单数据: user = request.POST.get('use ...

  9. [Python自学] day-18 (2) (MTV架构、Django框架、模板语言)

    一.实现一个简单的Web服务器 使用Python标准库提供的独立WSGI服务器来实现MVC架构. 首先,实现一个简单的Web服务器: from wsgiref.simple_server import ...

  10. Python自学之路---Day13

    目录 Python自学之路---Day13 常用的三个方法 匹配单个字符 边界匹配 数量匹配 逻辑与分组 编译正则表达式 其他方法 Python自学之路---Day13 常用的三个方法 1.re.ma ...

随机推荐

  1. Linux(CentOS 7)+ Nginx(1.10.2)+ Mysql(5.7.16)+ PHP(7.0.12)完整环境搭建

    首先安装Linux系统,我以虚拟机安装来做示例,先去下载 VitualBox,这是一款开源的虚拟机软件,https://www.virtualbox.org 官网地址.或者是VMware,www.vm ...

  2. CefSharp For WPF自定义右键菜单栏

    原文:CefSharp For WPF自定义右键菜单栏 初始化 <!--浏览器--> <cefSharpWPF:ChromiumWebBrowser Name="webBr ...

  3. AR研究-Demo集

    原文:AR研究-Demo集        之前研究了图像处理.图像识别及AR 等相关技术,下载了很多开源源码进行学习和尝试引用,包括c++.c#.Opengl.Emgu. Aforge.OpenCV. ...

  4. WPF刷新界面

    Winform 里有 Application.DoEvents();可刷新! WPF 里没这个,尽管可用委托实现多线程,但是刷新还是不行! 后来找到了 类似App.DoEvents()的方法(): 代 ...

  5. JDK源码阅读——LinkedList实现

    1 继承结构图 LinkedList是List的另一种实现.继承自AbstractSequentialList 2 数据结构 LinkedList与ArrayList不同的是LinkedList底层使 ...

  6. facebook javascript api 使用

    官方api文档:http://developers.facebook.com/docs 先简单的介绍下创建一个app(https://developers.facebook.com/apps),

  7. PHP自动加载类__autoload()浅谈

    在面向对象编程中,都是以对象为单位的操作,如果我有两个不同的类,类A和类B,在同一个文件里,实例化对象,就能在这个文件同时调用类A和类B的函数 <?php #a.php class A{ pub ...

  8. Pytorch Code积累

    2017 Python最新面试题及答案16道题 15个重要Python面试题 测测你适不适合做Python? torch.squeeze() Returns a tensor with all the ...

  9. ubuntu Linux 操作系统安装与配置

    Ubuntu是一个以桌面应用为主的Linux操作系统.Ubuntu每六个月发布一个新版本(一般是4和10月份,命名为YY.MM),每一个普通版本都将被支持 18个月,长期支持版(Long Term S ...

  10. C#匿名方法返回值赋值给变量

    The problem here is that you've defined an anonymous method which returns a string but are trying to ...