Python简明教程

0.7072018.09.26 01:49:43字数 2,805阅读 9,287

Python一小时快速入门

1.Python简介

 
pylogo.png

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终端操作,输入命令

 
prompt.png

执行xxx.py
交互模式指每输入一条语句将会得到实时反馈。
在命令行中输入

python

即可看到命令行变成如下样式,行前有>>>提示符。

 
interactive.png

交互模式下输入语句会得到实时反馈,而不用输入输出函数。
输入exit()退出交互模式。
我们在交互模式下写出第一个程序

print('Hello World')
 
helloworld.png

下面我们尝试在命令行模式写一个程序。
打开你喜欢的文本编辑器,写下

print('Hello World!\n')

保存为hello.py文件
在命令行中切换到文件所在目录,输入

python hello.py
python xxx.py

即可执行文件

 
excute.png

输入和输出
输出print()是一个python内置函数,可以直接输出括号里的对象。

x=3.14
print(x)
mingzi='Mark'
print(mingzi)
print(300+500)
print('name')

print()也可以打印多个字符串

print(name,age,school)//用逗号隔开
 
输出.png

输入 input()同样也是python内置函数

x=input('请输入内容:')
括号内可以写提示语,`input()`收到键盘输入后会创建一个对应类型对象。
print(x)
 
输入.png

输入输出组合起来就可以实现一些小交互操作了

name=input('请输入姓名:\n')
print('你的名字是:'+name)
 
组合.png

小结
在Python交互式模式下,可以直接输入代码,然后执行,并立刻得到结果。

在命令行模式下,可以直接运行.py文件。

4.python基础

语法

python的语法采取缩进语句块,不需要C、java的大括号区分
同一缩进的代码被认为是一个语句块,一般我们约定俗成使用4个空格为一个缩进符,所以我建议大家将TAB设置为4个空格,而不是缩进符
也不需要分号结尾

 
缩进.png
#`#`号后内容是注释

数据类型

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)
 
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

python简明教程的更多相关文章

  1. 《Python简明教程》总结

    Python经典教程<Python简明教程> 目录: 为什么Python 安装Python 体验Python Python数据类型 运算符与表达式 控制流 函数 模块 数据结构 解决问题 ...

  2. 【笔记】Python简明教程

    Python简明教程,此资源位于http://woodpecker.org.cn/abyteofpython_cn/chinese/ s=u'中文字符' #u表示unicode,使用u之后能正常显示中 ...

  3. python中global的用法——再读python简明教程

    今天看了知乎@萧井陌的编程入门指南,想重温一下 <python简明教程>,对global的用法一直不太熟练,在此熟练一下,并实践一下python中list.tuple.set作为参数的区别 ...

  4. Python 简明教程 --- 3,Python 基础概念

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 控制复杂性是计算机编程的本质. -- Brian Kernighan 了解了如何编写第一个Pytho ...

  5. Python 简明教程 --- 2,第一个Python 程序

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果你发现特殊情况太多,那你肯定是用错方法了. -- Carig Zerouni 当你在自己的电脑上 ...

  6. Python 简明教程 --- 1,搭建Python 环境

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 人生苦短,我用Python. -- 龟叔T恤 Python 是一门解释型语言,所以要想运行Pytho ...

  7. Python 简明教程 --- 18,Python 面向对象

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 代码能借用就借用. -- Tom Duff 目录 编程可分为面向过程编程和面向对象编程,它们是两种不 ...

  8. Python 简明教程 --- 13,Python 集合

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果代码和注释不一致,那很可能两者都错了. -- Norm Schryer 目录 前几节我们已经介绍 ...

  9. Python 简明教程 --- 14,Python 数据结构进阶

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果你发现特殊情况太多,那很可能是用错算法了. -- Carig Zerouni 目录 前几节我们介 ...

随机推荐

  1. 龙芯 Fedora 28 设置 VNC

    系统为龙芯版Fedora28 (床28) Fedora防火墙默认阻止了VNC所需的端口的访问,导致VNC客户端一直无法连接. 安装VNC Server sudo dnf install tigervn ...

  2. Zabbix添加SNMP自定义监控项OID出现“No Such Instance currently exists at this OID”

    原因:zabbix 是用snmpget来获取指定的OID数据,snmpwalk是遍历某个OID下的数据. 所以一定要用snmpget来验证某个OID是否正确. snmptranslate 获取的OID ...

  3. day03_流程控制语句

    day03_流程控制语句 建议: ​ 凡是次数确定的场景多用for循环,否则用while循环. 三元运算符 ​ 由?:符号表示的,具体的含义其实就和if-else结构的含义差不多,这种运算符会将某个条 ...

  4. Linux基础:简介安装、常用命令和JDK、Mysql、Tomcat的安装

    一.Linux的简介 1.Linux的概述 Linux是基于Unix的开源免费的操作系统,由于系统的稳定性和安全性几乎成为程序代码运行的最佳系统环境.Linux是由Linus Torvalds(林纳斯 ...

  5. Java8新特性一点通 | 回顾功能接口Functional Interface

    Functional Interface Functional Interface是什么? 功能接口是java 8中的新增功能,它们只允许一个抽象方法.这些接口也称为单抽象方法接口(SAM接口).这些 ...

  6. PE可执行文件加载器

    PE文件加载器 模仿操作系统,加载pe文件到内存中 该项目主要是为了检测pe的学习程度,是否都完全理解了.当然没有完全理解 实现功能的如下: 模仿操作系统,加载pe文件到内存中,然后执行待执行的pe文 ...

  7. Java支付宝PC网站支付功能开发(详细教程)

    一.前言 本案例使用的是Java实现的.使用支付宝的沙盒环境示例.发布需要换成正式环境.这里就不作详细说明了 本代码适合用来做参考,不要直接复制去使用. 没有账号的需要去平台注册一个: 登录支付宝开发 ...

  8. kubernetes从私有仓库下载遇到的坑

    1.必须要在所有的k8s节点上配置私有仓库的地址.(master和node) 2.创建secret kubectl create secret docker-registry secret名字 --d ...

  9. HDU_2571_DP

    http://acm.hdu.edu.cn/showproblem.php?pid=2571 简单dp,从上到下,从左到右依次更新每一格的最大幸运值. #include<iostream> ...

  10. JS中map与forEach的区别

    很多同学可能对于map与forEach的区别不是太了解,今天我们介绍一下JS中的map与forEach方法, 我对map的理解是,这个方法对一个数组arr1中的每一个元素进行遍历(传递给一个数组,参数 ...