python简明教程
Python简明教程
Python一小时快速入门
1.Python简介
Python是一种相当高级的解释性程序设计语言,完成同一个任务C语言可能需要几千行代码
Java要写100行,Python可能只需要20行。
用Python可以做什么?可以做日常任务,比如自动备份你的MP3;可以做网站,很多著名的网站包括YouTube就是Python写的;可以做网络游戏的后台,很多在线游戏的后台都是Python开发的。总之就是能干很多很多事啦。
Python当然也有不能干的事情,比如写操作系统,这个只能用C语言写;写手机应用,只能用Swift/Objective-C(针对iPhone)和Java(针对Android);写3D游戏,最好用C或C++。
但是,对于初学者和完成普通任务,Python语言是非常简单易用的。
python提供了完善的内置库,覆盖了网络、文件、GUI、数据库、文本等大量内容,用python开发,很多功能不必从零编写,直接使用现成的即可。
除了内置库外,Python还有大量第三方库,也就是别人开发的,可以直接使用的。当然如果你的代码封装的很好,也可以作为第三方库给别人使用。
python适合开发网络应用、日常小工具、科学计算等活动。
2.安装Python
Python有两个版本,2.x和3.x互不兼容,按需求安装即可。
安装教程参考我的Ananconda简单入门。
python解释器:我们写的代码会在解释器上运行,类似JVM的机制,我们安装的标准解释器是用C编写的,称为CPython解释器,另外有IPython 是基于CPython交互解释器。还有Java写的Jpython解释器等等。我们一般使用Cpython。
3.python环境基本操作
基本上有两种操作Python的方式,命令行模式
和交互模式
。命令行模式
就是正常的shell终端操作,输入命令
执行xxx.py交互模式
指每输入一条语句将会得到实时反馈。
在命令行中输入
python
即可看到命令行变成如下样式,行前有>>>
提示符。
交互模式
下输入语句会得到实时反馈,而不用输入输出函数。
输入exit()
退出交互模式。
我们在交互模式
下写出第一个程序
print('Hello World')
下面我们尝试在命令行模式
写一个程序。
打开你喜欢的文本编辑器,写下
print('Hello World!\n')
保存为hello.py文件
在命令行中切换到文件所在目录,输入
python hello.py
python xxx.py
即可执行文件
输入和输出
输出print()
是一个python内置函数,可以直接输出括号里的对象。
x=3.14
print(x)
mingzi='Mark'
print(mingzi)
print(300+500)
print('name')
print()
也可以打印多个字符串
print(name,age,school)//用逗号隔开
输入 input()
同样也是python内置函数
x=input('请输入内容:')
括号内可以写提示语,`input()`收到键盘输入后会创建一个对应类型对象。
print(x)
输入输出组合起来就可以实现一些小交互操作了
name=input('请输入姓名:\n')
print('你的名字是:'+name)
小结
在Python交互式模式下,可以直接输入代码,然后执行,并立刻得到结果。
在命令行模式下,可以直接运行.py文件。
4.python基础
语法
python的语法采取缩进语句块,不需要C、java的大括号区分
同一缩进的代码被认为是一个语句块,一般我们约定俗成使用4个空格为一个缩进符,所以我建议大家将TAB设置为4个空格,而不是缩进符
也不需要分号结尾
#`#`号后内容是注释
数据类型
python中所有数据类型都是对象,python创建一个数据类型不需要定义和提前声明,当一个变量赋值后就创建了它。
常用的数据类型
整数
python可以处理任意大小的整数,和matlab有异曲同工之妙,数据类型并没有固定的类型长度。
整数在程序中的写法和数学写法一样10
,-100
,214700000000000000
等等
浮点数
也就是小数,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)
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")
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
python简明教程的更多相关文章
- 《Python简明教程》总结
Python经典教程<Python简明教程> 目录: 为什么Python 安装Python 体验Python Python数据类型 运算符与表达式 控制流 函数 模块 数据结构 解决问题 ...
- 【笔记】Python简明教程
Python简明教程,此资源位于http://woodpecker.org.cn/abyteofpython_cn/chinese/ s=u'中文字符' #u表示unicode,使用u之后能正常显示中 ...
- python中global的用法——再读python简明教程
今天看了知乎@萧井陌的编程入门指南,想重温一下 <python简明教程>,对global的用法一直不太熟练,在此熟练一下,并实践一下python中list.tuple.set作为参数的区别 ...
- Python 简明教程 --- 3,Python 基础概念
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 控制复杂性是计算机编程的本质. -- Brian Kernighan 了解了如何编写第一个Pytho ...
- Python 简明教程 --- 2,第一个Python 程序
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果你发现特殊情况太多,那你肯定是用错方法了. -- Carig Zerouni 当你在自己的电脑上 ...
- Python 简明教程 --- 1,搭建Python 环境
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 人生苦短,我用Python. -- 龟叔T恤 Python 是一门解释型语言,所以要想运行Pytho ...
- Python 简明教程 --- 18,Python 面向对象
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 代码能借用就借用. -- Tom Duff 目录 编程可分为面向过程编程和面向对象编程,它们是两种不 ...
- Python 简明教程 --- 13,Python 集合
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果代码和注释不一致,那很可能两者都错了. -- Norm Schryer 目录 前几节我们已经介绍 ...
- Python 简明教程 --- 14,Python 数据结构进阶
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果你发现特殊情况太多,那很可能是用错算法了. -- Carig Zerouni 目录 前几节我们介 ...
随机推荐
- 同一个环境同时使用python2和python3的方法
1.首先安装好p2和p3,配置好环境变量.在CMD内执行python返回版本号,返回结果根据配置的环境变量而定,如果p2的环境变量配置在前面,则返回p2的版本号,反之则p3 2.然后把各版本目录下的p ...
- Python3基础之正则表达式
正则表达式 在线测试工具 http://tool.chinaz.com/regex/ 同一个位置上可以出现的字符的范围. 字符组 : [字符组] 在同一个位置可能出现的各种字符组成了一个字符组,在正则 ...
- crtmpserver服务器的搭建
https://blog.csdn.net/wutong_login/article/details/7612477 https://www.cnblogs.com/wangqiguo/p/60145 ...
- ReactNative---卡顿问题及性能优化
ReactNative性能优化 在reactnative 中如果要更改DOM中的数据显示,只有通过setState方法来实现:但是当setState时,要刷新整个DOM:在一般情况先还能保证体验,但是 ...
- qq机器人 python实现 自动回复
我以前写的代码我现在贴在了下面,下面的连接是我自己的博客,有问题希望大家提出来,一起进步...我以前试过,没啥问题.可以实现聊天. https://realwuxiong.github.io/blog ...
- 通过 SCF Component 轻松构建 REST API,再也不用熬夜加班了
本教程将分享如何通过 Serverless SCF Component .云函数 SCF 及 API 网关组件,快速构建一个 REST API 并实现 GET/PUT 操作. 当一个应用需要对第三方提 ...
- qt creator源码全方面分析(2-1)
目录 coding-style.html 提交代码 二进制兼容性和源代码兼容性 代码构造 格式化 利用标识符 空格 大括号 圆括号 换行符 声明 命名空间 模式与实践 命名空间 传递文件名 插件扩展点 ...
- Hibernate(五)
================================criteria(QBC)查询========================QBC,(容器)又名对象查询:采用对象的方式(主要是cri ...
- 7.场景5:使用Linux桥的VRRP(L3HA)的高可用性
此场景描述了使用ML2插件和Linux网桥的OpenStack网络服务的高可用性实现. 他的高可用性实施例增强了这样的场景:具有Linux网桥架构的传统使用了keepalived的虚拟路由器冗余协议( ...
- 06讲案例篇:系统的CPU使用率很高,但为啥却找不到高CPU的应用
小结 碰到常规问题无法解释的 CPU 使用率情况时,首先要想到有可能是短时应用导致的问题,比如有可能是下面这两种情况. 第一,应用里直接调用了其他二进制程序,这些程序通常运行时间比较短,通过 top ...