一、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. python 垃圾回收装置

    转载: https://www.cnblogs.com/pinganzi/p/6646742.html 简要描述Python的垃圾回收机制(garbage collection). 答案 这里能说的很 ...

  2. 修复Windows 10 SDK 17763中NavigationView上的AcrylicBrush丢失

    原文 修复Windows 10 SDK 17763中NavigationView上的AcrylicBrush丢失 Microsoft发布了新版本的Windows 10 UWP SDK Build 17 ...

  3. 使用 matlab 数据集的生成(generate datasets)

    一般手工生成的数据集(artificial datasets),通常用于实验部分最开始的演示和示意,用于对结果的一种精确计算和量化分析. 1. Swiss/Helix/Twinpeaks/Broken ...

  4. 基于VC面部识别软件(识别出人脸特征)

    最近在学校MFC和Opencv,毕业只是做面部识别软件,所以写一个,我觉得很简单. 第一个VC组态opencv.不用说.非常easy,网上资料非常多,然后就是设计界面啦,这个全然凭个人喜好了,我设计的 ...

  5. HDU4421 Bit Magic 【2-sat】

    叙述性说明: 这给出了一个矩阵,原来的请求a排列 2-sat称号.对于每一位跑步边,跑31位可 详细的施工方 注意N=1的情况特判,还有检查对称元素是否同样 #include <stdio.h& ...

  6. HDOJ 2189 悼念512四川汶川大地震遇难者——来生一起走 【生成函数】

    意甲冠军:没有解释的很清楚. 策略:如果, 这是改变一个简单的生成函数. 这道题做了好久,才明确是那有毛病.还是理解的不够深刻. AC代码: #include<stdio.h> #incl ...

  7. 给CentOS 6安装Tomcat 7,从一开始

    由于给企业培训以及前面几年使用PHP太多了,这次server逐步转为使用JavaEE来搭建. 下载的JDK 7.8已经出来了,可是不太熟悉,所以还是下载7版本号.这里怎样安装JDK7不讲了. 当前最新 ...

  8. VUE在开发环境下实现跨域

    1. 跨域设置 VUE项目的 config文件夹下index.js文件中修改 dev: proxyTable中的内容(默认是没有内容的): 添加内容: '/list': { target: 'http ...

  9. .NET Core 3.0 Preview 5 亮点之一:发布单文件可执行程序

    在阅读 Announcing .NET Core 3.0 Preview 5 时发现了 .NET Core 3.0 Preview 5 的一个新特性 —— Publishing Single EXEs ...

  10. sqlite 初

    1.SQLite是什么 基于文件的轻型数据库 无服务器  零配置  支持事务  开源 2.SQLite 怎么用   2.1 安装 SQLite官网上下载对应的DLL 与工具 配置环境变量 安装完成以后 ...