热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python语言核心理念_Python发展起源及基础知识

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;而解释器则是只在执行程序时,才一条一条的解释成机器语言

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;

而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.

这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)

1185609-20170621103143070-1768185941.png

编译型vs解释型

编译型

优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。

缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。

解释型

优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。

缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

python是一门动态解释性的强类型定义语言。

五、Python的优缺点

先看优点:

1、Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。

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

3、高级语言——当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节。

4、可移植性——由于它的开源本质,Python以及被移植到许多平台上(经过改动使它能够工作在不同平台上)。如果你小心的避免使用依赖于系统的特性,那么你的Python程序无需修改就几乎可以在市场上所有的系统平台上运行。

5、可扩展性——如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。

6、可嵌入性——你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚步功能。

再看缺点:

1、速度慢,Python的运行速度相比C语言确实慢很多,跟Java相比也要慢一些,因此这是很多所谓的大牛不屑于使用Python的主要原因,但其实这里所指的运行速度慢在大多数情况下用户是无法直接感知到的,必须借助测试工具才能体现出来!

2、代码不能加密,因为Python是解释性语言,它的源码都是以明文形式存放的,不过我不认为这算是一个缺点,如果你的项目源代码必须是加密的,那你一开始就不应该用Python来去实现。

3、线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在windows上为Win thread,完全由操作系统调度线程的执行。一个Python解释器进程内有一条主线路,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止线程的并行执行。关于这个问题的折衷解决方法,我们在以后线程和进程章节里再进行详细探讨。

六、Python解释器

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

由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。

CPython

官方下载并安装号Python2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。

CPython是使用最广范的Python解释器。我们默认所有代码也都在CPython下执行。

IPython是基于CPython的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。

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

PyPy据说是Python的未来,开发者也说想让你的Python代码块用此解释器。

PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。

绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。

Jython

Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

IronPython

IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

小结:Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好 办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。

七、用Python2还是Python3

官方的建议是尽快升级到Python3,而且Python3有很多新功能,新特性,所以除非有一些业务是用Python2编写的,一般建议用Python3。

Python3.0还有一个比较大的功能没有完成,那就是Twisted ,这是一个非常庞大的系统工程,预计最近应该快完成了吧,敬请期待吧!

八、Python安装

windows

1、下载安装包

https://www.python.org/downloads/

2、安装

最新版win7及以后系统,默认安装路径:C:\Users\Administrator\AppData\Local\Programs\Python\Python36\

3、配置环境变量

【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】

如:原来的值;C:\Users\Administrator\AppData\Local\Programs\Python\Python36\,切记前面有分号

linux、Mac

无需安装,原装Python环境,只要更新一下版本就可以了!

九、变量/字符编码

变量是什么?

简单的说,变量就是一个标签用来说明内存上的空间地址的。声明变量的过程就是向内存申请一块空间用来存放数据的过程。

声明变量

#_*_coding:utf-8_*_

name = "Alex Li"

上述代码声明了一个变量,变量名为: name,变量name的值为:"Alex Li"

变量定义的规则:

①变量名只能是 字母、数字或下划线的任意组合

②变量名的第一个字符不能是数字

③以下关键字不能声明为变量名

['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

变量的赋值

name = "Alex Li"

name2 = name

print(name,name2)

name = "Jack"

print("What is the value of name2 now?")

变量名尽量有意义,让人能一眼就知道这个变量表示什么意思。

如果要表示一个关系型的变量名,一般的写法是:

gf_of_oldboy = "Chen da hua"

GFOfOldboy = "Chen da hua"

Python里面没有定义常量这么个概念,但是习惯上是用大写字符串表示常量例如:

PIE = 3.1415926

保留字段不能使用,尽量不要使用中文名和拼音做变量名,这样会显得很low。

字符编码的区别与介绍

在Python2.X版本里面,不能直接使用中文,要使用必须事先声明:

# -*- coding:utf-8 -*-

name = "你好,世界"

print(name)

Python代码添加注释的方法:

1、直接在以#开头即表示注释。

2、多行注释,在要注释的代码前后行使用三个【'''】或者【"""】把要注释的内容放进去就可以了。

另外,【'''】或者【"""】包括的内容可以作为一个整体赋值个一个变量来处理。

例子:

msg = '''

gf_of_oldboy = "wang da hua"

GFOfOldboy = "Chen rong feng"

'''

#print(gf_of_oldboy,GFOfOldboy)

print(msg)

执行结果:

gf_of_oldboy = "wang da hua"

GFOfOldboy = "Chen rong feng"

另外需要说明的是,单引号和双引号的作用和shell中类似,单引号表示强引用,双引号表示弱引用。

用户交互程序

格式化输出指定内容:

方法一:++表示法

name = input("Name:")

age = input("Age:")

job = input("Job:")

salary = input("Salry:")

info = '''

------------------------- info of ''' + name +'''---------------------------------------

Name:''' + name + '''

Age:''' + age + '''

Job:''' + job + '''

Salary:''' + salary + '''

------------------------ info of ''' + name + '''---------------------------------------

'''

print(info)

方法二:占位符表示法

name = input("Name:")

#age = input("Age:")

age = int(input("Age:"))

print(type(age),type(str(age))) #这里会打印age的数据类型,然后转换成字符串后又打印出数据类型,为了验证上面的转换是否生效

job = input("Job:")

salary = input("Salry:")

info2 = """

------------------------------ info of %s ---------------------------------------------

Name:%s

Age:%s #这里可以使用%d指定只能输入整数,而非默认字符串,不过要在输入时强制转换数据类型,否则会报错。

Age:%d

Job:%s

Salary:%s

----------------------------- info end %s ---------------------------------------------

""" %(name,name,age,job,salary,name)

print(info2)

方法三:{}表示法

name = input("Name:")

age = input("Age:")

job = input("Job:")

salary = input("Salry:")

info3 = """

------------------------------ info of {_name} ---------------------------------------------

Name:{_name}

Age:{_age}

Job:{_job}

Salary:{_salary}

----------------------------- info end {_name} ---------------------------------------------

""" .format(_name=name,

_age=age,

_job=job,

_salary=salary)

print(info3)

方法四:是方法三的引申,用数字代表具体变量

info4 = """

------------------------------ info of {0} ---------------------------------------------

Name:{0}

Age:{1}

Job:{2}

Salary:{3}

----------------------------- info end {0} ---------------------------------------------

""" .format(name,age,job,salary)

print(info4)

注意:

除非迫不得已,否则尽量不要用,因为太耗内存,其他方法则好的多。

法一可以和法二、法三、法四混用,但是法二、法三、法四不能混用。

十、模块初识

Python的强大之处在于他有非常丰富和强大的标准库和第三方库,几乎你想实现的任何功能都有相应的Python库支持,以后的课程中会深入讲解常用到的各种库,现在,我们先来象征性的学2个简单的。

sys模块

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import sys

print(sys.argv)

#输出

$ python test.py helo world

['test.py', 'helo', 'world'] #把执行脚本时传递的参数获取到了

os模块

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import os

os.system("df -h") #调用系统命令

完全结合一下

import os,sys

os.system(''.join(sys.argv[1:])) #把用户的输入的参数当作一条命令交给os.system来执行

十一、选择表达式if ... else

#!/usr/bin/env python

# -*- coding:utf-8 -*-

#Author:Bill Xie

import getpass

_username = "xiaoxie"

_password = "123456"

username = input("username:")

password = input("password:")

#password = getpass.getpass("password:")

if _username == username and _password == password:

print("Welcome user %s login."%(username))

else:

print("Invalid username or password!")

注意事项:

1、Python代码是严格要求语法缩写的,如果不注意就会报错,缩进错误

IndentationError: expected an indented block

学习 Python 与其他语言最大的区别就是,Python 的代码块不使用大括号 {} 来控制类,函数以及其他逻辑判断。python 最具特色的就是用缩进来写模块。缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行。

IndentationError: unexpected indent 错误是 python 编译器是在告诉你"Hi,老兄,你的文件里格式不对了,可能是tab和空格没对齐的问题",所有 python 对格式要求非常严格。

如果是 IndentationError: unindent does not match any outer indentation level错误表明,你使用的缩进方式不一致,有的是 tab 键缩进,有的是空格缩进,改为一致即可。

因此,在 Python 的代码块中必须使用相同数目的行首缩进空格数。

建议你在每个缩进层次使用 单个制表符 或 两个空格 或 四个空格 , 切记不能混用

2、这里的打印输出命令内使用了变量引用,这里说说两种变量引用的方式。

① 和上面注释那里提到的方式类似,先使用%s占位符,然后再指明占位符要使用的变量。

print("Welcome user %s login."%(username))

②使用花括号{}引用

print("Welcome user {_username} login." .format(_username=username))

print("Welcome user {0} login." .format(username)) #与上面类似,只不过是用数字代替第几个要替换的变量。

十二、循环体

猜数游戏:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

#Author:Bill Xie

age_of_oldboy = 29

guess_age = int(input("Guess oldboy's age:"))

if guess_age == age_of_oldboy:

print("You got it.")

elif guess_age > age_of_oldboy:

print("Think smaller...")

else:

print("Think bigger...")

引出循环的说明:

while循环语法:

while 条件:

循环体

esle:#可以没有这个

循环体

for循环语法:

for i in range(开始数,结束数,步长):

循环体

else#可以没有

循环体

未完,待更新。。。。



推荐阅读
  • 线程概念在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列指令序列”;一切进程至少都有一个执行线程;  进程  VS. 线程  ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • Linux 中使用 clone 函数来创建线程
    2019独角兽企业重金招聘Python工程师标准Linux上创建线程一般使用的是pthread库实际上libc也给我们提供了创建线程的函数那就是cloneintclone(i ... [详细]
  • C语言编程gcc怎么生成静态库.a和动态库.so
    这篇文章将为大家详细讲解有关C语言编程gcc怎么生成静态库.a和动态库.so,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章 ... [详细]
  • 主要用的线程函数:1.创建线程:12intpthread_create(pthread_t*thread,constpthread_attr_ ... [详细]
  • 采用CreateThread()创建多线程程序
    本位转自:http:blog.csdn.netcbnotesarticledetails8277180在window环境下,Win32提供了一系列的AP ... [详细]
  • 近期看见一篇来自Intel的很有意思的分析文章,作者提到在他向45名与会的各公司程序员开发经理战略师提问“什么是实施并行编程的最大障碍”时,下面五个因素 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • Threadtowaitinfinitelyinaloopuntilaflagstatechange,thencallfunction.线程在循环中无限期等待,直到标志状 ... [详细]
author-avatar
天津市翔瑞特制冷设备_208
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有