Python是什么?用Python能够作什么?

Python是一种至关高级的解释性程序设计语言,完成同一个任务C语言可能须要几千行代码
Java要写100行,Python可能只须要20行。php

用Python能够作什么?能够作平常任务,好比自动备份你的MP3;能够作网站,不少著名的网站包括YouTube就是Python写的;能够作网络游戏的后台,不少在线游戏的后台都是Python开发的。总之就是能干不少不少事啦。css

Python固然也有不能干的事情,好比写操做系统,这个只能用C语言写;写手机应用,只能用Swift/Objective-C(针对iPhone)和Java(针对Android);写3D游戏,最好用C或C++。java

可是,对于初学者和完成普通任务,Python语言是很是简单易用的。python

python提供了完善的内置库,覆盖了网络、文件、GUI、数据库、文本等大量内容,用python开发,不少功能没必要从零编写,直接使用现成的便可。shell

除了内置库外,Python还有大量第三方库,也就是别人开发的,能够直接使用的。固然若是你的代码封装的很好,也能够做为第三方库给别人使用。数据库

python适合开发网络应用、平常小工具、科学计算等活动。swift

2.安装Python

Python有两个版本,2.x和3.x互不兼容,按需求安装便可。

ruby

python解释器:咱们写的代码会在解释器上运行,相似JVM的机制,咱们安装的标准解释器是用C编写的,称为CPython解释器,另外有IPython 是基于CPython交互解释器。还有Java写的Jpython解释器等等。咱们通常使用Cpython。bash

3.python环境基本操做

基本上有两种操做Python的方式,命令行模式交互模式
命令行模式就是正常的shell终端操做,网络

 

4.python基础

语法

python的语法采起缩进语句块,不须要C、java的大括号区分
同一缩进的代码被认为是一个语句块,通常咱们约定俗成使用4个空格为一个缩进符,因此我建议你们将TAB设置为4个空格,而不是缩进符
也不须要分号结尾


 
 

数据类型

python中全部数据类型都是对象,python建立一个数据类型不须要定义和提早声明,当一个变量赋值后就建立了它。
经常使用的数据类型

整数

python能够处理任意大小的整数,和matlab有殊途同归之妙,数据类型并无固定的类型长度。
整数在程序中的写法和数学写法同样

浮点数

也就是小数,1.23,3.14等等,浮点数的精度能够规定

字符串

字符串是用单引号' '和双引号" "括起来的任意文本,事实上是字符的序列``list,稍后咱们会讲到
既然字符串是序列,那么它固然支持各元素位置的操做。

s='abcd' len(s)=4 s[0]='a' s[3]='d' 

可使用序列的偏移量表示序列中的元素的索引。
序列中第一个元素索引为0,以此类推。
序列也可以反向索引从,最后一个开始s[-1],至关于s[len(s)-1],即倒数第几个。

s='abcd'
s[-1]='d'
s[-2]='c'

序列中,咱们能够在方括号中使用任何表达式
除了索引,序列还支持分片(slice)

s='abcd'
s[1:3]='bc'

分片中,默认左边界是0,默认右边界是序列长度。

s[:3]='abc' s[1:]='bcd' s[:]='abcd' 做为一个序列,字符串也支持拼接 s+'zxyz='abcdxyz' 
不可变性

字符串的某个字符不可以被改变,可是能够新建字符串

s='abcd'
s[1]='x'是错误的
能够新建
n=s[1]+'x'
python中,数字、字符串、元组都是不可变的。列表、和字典可变。
字符串类型特定方法

find()find方法是字符串特有的字串查找方法

s='china'
s.find('in')=3
将会返回找到的偏移地址。

replace()是替换字符串内字符的方法。

s.replace('in','out')='chouta' s='china'//s并无改变。 

split()是分离方法

s='aaa,bbb,ccc'
s.split(',')=['aaa','bbb','ccc']

将字符串序列分为了有三个字符串的列表。
还有一些方法,使用dir(数据类型)查看对象的全部属性和方法,使用help(方法)查看某方法功能。帮助内容与官方文档一致,最好查询方法就是使用的时候查看.

name='china'
dir(name)
help(name.split)
 
help.png

str(数字)能够将数字转换为字符串,int(string)能够将字符串转换为数字等等

列表 list

列表是序列的一种,支持全部字符串的操做,惟一的区别返回的结果仍然是列表。
列表用方括号[]定义

s=['abc',123,3.14] len(s)=3 咱们仍然能够对列表进行索引、切片等: s[1]=123 s[:-1]=['abc',123] s+[4,5,6]=['abc',123,3.14,4,5,6] s=['abc',123,3.14]s仍然没有被改变 
列表特定方法

列表没有固定大小,能够根据须要增长和减少
append() 在列表末尾增长对象
pop()丢弃列表内容。
sort()列表排序,默认升序。
reverse()列表反转

s=[123,456,789] s.append(666) s=[123,456,789,666] s.pop(2) s=[123,456,666] s.reverse() s=[666,456,123] s.sort() s=[123,456,666] 

列表支持嵌套,元素也能够是另外一个列表
m=[[1,2,3],[4,5,6],[7,8,9]]是一个3x3矩阵

m[1]=[4,5,6]
列表解析

除了列表的方法,列表还提供了一个高级操做列表解析
使用列表解析能够简单的操做矩阵

col=[row[1] for row in m]
=[2,5,8]
实际运用可能更复杂
col=[row[1]+1 for row in m if row[1]%2==0]
=[3,9]

列表解析编写在方括号中
可使用迭代器

G=(sum(row) for row in m) next(G)=6 next(G)=15 

内置函数map(),也会对各项对应位置进行运算

map(sum,m) =[6,15,24] map(min,m) =[1,4,7] 

事实上。列表、集合、字典均可以使用解析。

元组 tuple

元组也是序列,但它具备不可变性,一旦初始化就不能修改,语法上它被编写在圆括号中,支持任意类型、任意嵌套和常见的序列操做。

s=(1,2,3,4) len(t) =4 

元组有特别方法

s.index(4)
=3

即4 出如今偏移量3,4 appears at offset 3

s.count(4) =1 

4只出现一次
元组存在的意义是完整性检查,好比传输数据时保证程序其余部分不会改变数据。

字典 dict

用{}花括号括起来,一个key对应一个value

索引和序列类似,不过不是数字而是key值
D['name']='zhangsan'

事实上咱们是在用key哈希映射键搜索值
重访嵌套

D={'name': 'zhangsan','age': '20','job': ['dev','manager']}
D[job]
= ['dev','manager']
D[job][-1]
='manger'

键排序

D={b:'name',c:'job',a:'age',d:'gender;} 咱们通常取key并新建列表 ks=list(D.keys()) ks.sort() for key in keys: print(key,'=>',D[key]) 

也可使用内置函数sorted()

for key in sorted(D)
  print(key,'=>'D[key]

集合 set

与字典相似,只有键key,但没有值 value而且不重复

循环

for循环自带迭代器,能够步进循环列表、字符串、对象等

for i in range(2,100,2): x=sum(i) print(sum) 若是是字符串s='abcd' for i in s: print(i) 列表l=['name',2,3,4] for i in l: print(i) 画一个杨辉三角 for i in range(1,10): print('*'*i+"\n") 

 

 
yangtangle.png

while循环

 

x=4
while (x>4):
  x--
  print(x)

判断分支

if-else语句

a=100,b=10
if a<b:
  print(a)
elif a==b:
  print(a,b)
else :
  print(b)

break提早退出当前循环
continue跳过本次循环

函数

python中的函数很是简单

def Fun_Name (para1,para2) if xxx return xxx else xxx return xxx 

返回能够时任何对象,由于python中全部东西都是对象,能够直接赋值给某对象。

x=Fun_name(para1,para2)
而后使用x

空函数不作任何事情
def name()
pass
语句什么都不作,那有什么用?实际上pass能够用来做为占位符,好比如今还没想好怎么写函数的代码,就能够先放一个pass,让代码能运行起来。
返回多个值固然是能够的,好比游戏里要返回一个三维坐标

import math
def move(x,y,z,step,angle) nx=x+step*math.cos(angle) ny=y+step*math.sin(angle) nz=z+step*math.tan(angle) return nx,ny,nz 

其中import math表示导入math包,使用封装好的函数
获得坐标咱们就能够赋值了

x,y,z=move(100,100,0,60,math.pi/3)
print(x,y,z)

其实彻底可使用一个对象接收

role=move(100,100,0,60,math.pi/3)
print(role)

效果和上面同样
关于参数,正确传参很是重要,pyrhon函数参数有默认参数可变参数关键字参数
默认参数
定义时

def funame (x,y=2) 使用时能够,仅使用一个参数x,参数y将默认为2 funame(x) 若是使用funame(x,y)参数值将为传入值 

默认参数下降了使用函数的难度,默认参数必须指向不变对象
可变参数传入参数的个数时可变的,咱们首先想到将参数做为一个list传入 如:

def cal(numbers) x=0 for n in numbers x+=sum(n) return (x) 

可是要在使用前组装一个list或tulple
咱们可使用可变参数

def cal(*numbers) x=0 for n in numbers x+=sum(n) return (x) 

若是已经有一个list或者tuple,要调用一个可变参数怎么办?能够这样作:

nums = [1, 2, 3]
calc(nums[0], nums[1], nums[2])
=6

这种写法固然是可行的,问题是太繁琐,因此Python容许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去:

nums = [1, 2, 3]
 calc(*nums)
=6

关键字参数可变参数容许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数容许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。请看示例:

def person(name, age, **kw): print('name:', name, 'age:', age, 'other:', kw) 函数person除了必选参数name和age外,还接受关键字参数kw。在调用该函数时,能够只传入必选参数 person('Michael', 30) =name: Michael age: 30 other: {} 也能够传入任意个数的关键字参数: person('Bob', 35, city='Beijing') =name: Bob age: 35 other: {'city': 'Beijing'} person('Adam', 45, gender='M', job='Engineer') =name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'} 

关键字参数有什么用?它能够扩展函数的功能。好比,在person函数里,咱们保证能接收到name和age这两个参数,可是,若是调用者愿意提供更多的参数,咱们也能收到。试想你正在作一个用户注册的功能,除了用户名和年龄是必填项外,其余都是可选项,利用关键字参数来定义这个函数就能知足注册的需求。

5.python进阶

模块,咱们以前导入过math模块(库)(包)

import math 

import xxx后python将会找到包所在地址,而且编译,开销很大,但以后就能够直接使用它的函数,xxx.function()
例如引入

import random
ramdom.choice([1,2,3]) 或者起别名 import random as ran ran.choice([1,2,3]) 

另外一种导入包的方式是 from 从某个模块中导入某个具体对象的复制

from xxx import function() from random import choice() choice([1,2,3]) 

就能够
math时python提供的模块(库)(包,咱们可使用本身写的模块,也可使用第三方模块
在Python中,安装第三方模块,是经过包管理工具pip完成的。
通常安装某个模块
直接使用pip install packagename
且慢,咱们还有更好的办法
咱们推荐使用的Anaconda,这是一个基于Python的数据处理和科学计算平台,它已经内置了许多很是有用的第三方库,咱们装上Anaconda,就至关于把数十个第三方模块自动安装好了,很是简单易用。
直接在要装某模块的环境下

conda install packagename

便可

相关文章
相关标签/搜索