最近蛮多人在学python,好久没有写过东西,觉得编程语言本身并不难,所以想写写看。主要是写给非计算机专业的同学快速熟悉python这个工具,如果是计算机专业的同学最好掌握好一门语言后再来看python,会有更深刻的理解。
再插一句,建议直接看py3了,差别不算大,唯一区别是py2看起来有些语法比较“随意”一些。我自己最开始用的py2,后来里因为tensorflow还是cuda之类的不支持2就转了3,况且3大约在未来会完全替代2。为了避免大家弄混就不介绍py2,好啦废话就说这么多,开始py教学。
-----------------------------------------------------py3-------------------------------------------------------
一、python3的数据类型(6种) 10min
1、数字类型
int 整数,仅有的一种整数类型int,表示为长整型(类似于C中各种longlongint的合体)
bool 布尔型,Ture&False
float 浮点型,如1.11、 1.2E-3
complex 复数,如1+2i
2、字符串类型(String)
规则:(1) ' ' 和 " " 没有区别 如:a = 'man' a = "man"
(2) +表示直接连接字符串 如:a = 'man' ; b = '666' ; c = a+b c = 'man666'
(3) """三引号"""" 可以声明多行字符串 不需要缩进
(4) 字符串不能改变
使用(类似C的字符串数组)
str = 'abcdefg' print(str) # 输出字符串 print(str[0:-1]) # 输出第一个到倒数第二个的所有字符 print(str[0]) # 输出字符串第一个字符 print(str[2:5]) # 输出从第三个开始到第五个的字符 print(str[2:]) # 输出从第三个开始的后的所有字符 print(str * 2) # 输出字符串两次
3、基本数据类型(4种)(很重要)
List 列表
Tuple 元祖
Sets 集合
Dictionary 字典
通常字典和列表用的多一点。(个人来说)
①List 列表
特性(3个):可改变,使用[ a , b , .... ]声明,元素支持数字、字符串
list = [ 'abcd', 111 , 1.23, 'man', 19999.11 ]
print (list) # 输出完整列表 print (list[0]) # 输出列表第一个元素 print (list[1:3]) # 从第二个开始输出到第三个元素 print (list[2:]) # 输出从第三个元素开始的所有元素 print (list * 2) # 输出两次列表 list2 = '111' l = list + list2 # 连接两个list
list内置函数:
len(list) 返回列表元素个数
max(list)/min(list) 返回列表最大/最小值
list(seq) 将元组(Tuple)转化成列表
list内置方法:
list.append(obj) 在列表末添加obj对象
list.extend(seq) 在列表末一次性添加seq序列
list.sort() 给列表排序,前提为同一种数据
list.count(obj) 计算obj在list中出现次数
list.index(obj) 找到obj在列表中第一次出现的索引位置
list.insert(index, obj) 在index处添加obj对象
list.pop(obj = list[-1]) 括号为default值,返回该删除元素
list.remove(obj) 删除列表中第一个匹配项
list.clear()/list.copy() 清空/复制列表
②Tuple 元祖(可理解为不可重写数据的list)
特性(3个):不可改变,使用( a , b , .... )声明,元素支持数字、字符串
tuple = ( 'abcd', 111 , 1.23, 'man', 19999.11 )
基本操作同list
tuple内置函数:
len(tuple) 元组中元素个数
max(tuple)/min(tuple) 元组中最大/最小元素
tuple(seq) 将列表转化为元组
③sets 集合
特性(3个):无序不可重复,使用{ a , b , .... }声明,元素支持数字、字符串
stes = { 'abcd', 111 , 1.23, 'man', 19999.11 }
a = set('abracadabra') b = set('alacazam') print(a) print(a - b) # a和b的差集 print(a | b) # a和b的并集 print(a & b) # a和b的交集 print(a ^ b) # a和b中不同时存在的元素
# 集合如果有重复元素会自动删除
④dictionary 字典
特性(3个):无序,使用{ keya: valuea , keyb: valueb , .... }声明,元素支持数字、字符串
dict = {'name': 'www','code':111, 'site': 'www.google.com'}
基本操作:
print (dict['name']) # 输出键为 'name' 的值 print (dict[2]) # 输出键为 2 的值 print (dict) # 输出完整的字典 print (dict.keys()) # 输出所有键 print (dict.values()) # 输出所有值
二、python3运算符 5min
1、注释(两种):
单行注释
# 这是一个注释
多行注释(单引号和双引号在py里相同)
''' 这是多行注释,用三个单引号 这是多行注释,用三个单引号 '''
""" 这是多行注释,用三个双引号 这是多行注释,用三个双引号 """
2、算术运算符
+ - * / 加减乘除
% mod运算
x**y 幂运算,返回x的y次幂
// 取整除,返回商的整数部分
3、比较运算符(同C、JAVA、R)
> < 大于/小于
>= / <= 大于等于/小于等于
!= / == 不等于/等于
均返回bool型(Ture/False)
4、赋值运算
直接写等式(无需使用int等声明关键字)
a = 10
b = 'aaa'
4、位运算
& | ~ 按位与或非
^ 异或
<< / >> 所有数左移/右移
5、逻辑运算符
and 布尔"与" - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值
or 布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值
not 布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True
6、成员运算符
in 如果在指定的序列中找到值返回 True,否则返回 False
not in 如果在指定的序列中没有找到值返回 True,否则返回 False
7、身份运算符
is 判断两个标识符是不是引用自同一个对象
is not 判断两个标识符是不是引用自不同对象
**
is 与 == 区别:
is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。
**优先级问题同C,多出的成员、逻辑、身份运算符为最低级别,优先顺序是身份、成员、逻辑。
三、py3的关键字 5min
1、条件控制
if condition_1: statement_block_1 elif condition_2: statement_block_2 else: statement_block_3
注意:条件后是冒号(:); 缩进需相同 。
if 嵌套逻辑同C,但是注意缩进
2、循环语句
①while
while condition: statement
②for
for <variable> in <sequence>: <statements> else: <statements>
③py特有的东东:range() 内置循环函数 + 关键字 in
数字序列:
for i in range(10): print(i)
for i in range(1,10): print(i) #注意py里右括号边界取不到
④break、continue用法逻辑同C
四、py3迭代器(这里也是Py比较有趣的东东) iter() 5min
这个比较重要,用得好能节省很多代码量
①先声明一点py迭代器只能无脑向后遍历
list = [1,2,3,4]
it = iter(list) #这里it类似于指向list的head指针
print(next(list)) #使用next(it)可以进行操作
②或者是结合for使用
list=[1,2,3,4] it = iter(list) # 创建迭代器对象 for x in it: print (x, end=" ")
③遍历技巧
knights = {'gallahad': 'the pure', 'robin': 'the brave'} for k, v in knights.items(): print(k, v)
questions = ['name', 'quest', 'favorite color'] answers = ['lancelot', 'the holy grail', 'blue'] for q, a in zip(questions, answers): print('What is your {0}? It is {1}.'.format(q, a))
五、py3函数 5min
1、规则:所有函数以def开头
无return时,默认返回none
def function_name(parameters): function_body
2、调用函数:
同一个py文件(可称为module)直接调用函数名及参数
#附上变量作用域
x = int(1.0) # 内建作用域 count = 0 # 全局作用域 def outer(): count_outer = 1 # 闭包函数外的函数中 def inner(): count_inner = 2 # 局部作用域
当需要在其他module(其他py文件)引用某一个module里的一个方法时:
import module1 module.function_name(parameters)
这里几乎同JAVA模式
3、调用package
from package_name import py_name
#补充一个 import tensorflow as tf #然后就是tf.method_name() #每次都有冲动打成tfboys
4、自身调用(不知道咋怎么形容这个)
class Province: # 静态字段 country = '中国' def __init__(self, name): # 普通字段 self.name = name
是不是很眼熟。简单来说和JAVA的this作用相同,只不过在py中要显视地写进parameter中
public class Province: #静态字段 private String country = "china"; public void __init__(country) { #普通字段 this.country = country; }
5、继承(省略)
之前看django的时候记的,主要是python现在一般也不会用来做web啦,就不花大篇幅写了,面向对象的东西实在太多。
如果能理解java,再来看py几乎区别就是在self那一块还有一些静态的方法、公有成员变量的差别。
实在想了解可以移步Python面向对象
六、py的IO操作 3min
①打印
print('{}+{}={}'.format(1, 2,3)
print('{word1}的英文是 {word2}'.format(word1='中国', word2='china'))
print("%d" % (num))
②写入
str = input("请输入:"); print ("你输入的内容是: ", str)
③文件IO
好吧跟C还是差不多,返回file对象
open(filename, mode)
mode如图
要求不多 不写也是极好的=-=
这样就好其实o.o
# 打开一个文件 f = open("/tmp/foo.txt", "r") str = f.readline() print(str) # 关闭打开的文件 f.close()
嗯对。。open+readline就差不多ok
当然了这种操作pandas里有很多
有这么厉害的包 为什么还要手写对不XD
七、py的数据结构 5min
这里和C很像很像 by the way python底层就是c(当然了如果想做也可以是vb这种)
①stack/heap
easy:
#用list stack = [1, 2, 3] #进栈 stack.append(4) stack.append(5) #出栈 stack.pop() stack
②queue
queue = deque(["Eric", "John", "Michael"]) queue.append("Terry") # Terry arrives queue.append("Graham") # Graham arrives queue.popleft() # The first to arrive now leaves queue.popleft() # The second to arrive now leaves queue # Remaining queue in order of arrival
list.index(obj) 从列表中找出某个值第一个匹配项的索引位置 |
list.insert(index, obj) 将对象插入列表 |
③嵌套list
py3:
matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], ] transposed = [] for i in range(4): transposed.append([row[i] for row in matrix])
用numpy比较容易解决 详情见numpy
import numpy as np transposed = matrix.T
八、线程
觉得还是很有必要看一看
不过这学期有修一门课叫parallel computing
等有时间再写一篇
-------------------------------------------分割线到这里结束啦--------------------------------------------------
九、python机制(计算机专业)
关于python底层的一些东西可以帮助你更深入去了解一些东东 安利一个知乎专题:源码读python
得配上algorithm和data structure才带感
可以看看专门的python方向的算法课MIT_Algorithm
十、py使用
环境:anaconda3(下载3开头的)
环境变量配置:安装会自动加上,记得再加上这个,前缀是conda的安装目录
ide:pycharm很不错,可以申请免费用(最近到期了,又得重新用校园邮箱apply),但是要玩转要很久
当然了jupyter更好咯~ 对于新手来说 进入方式cmd:输入jupyter notebook或者是jupyter lab(win)
最近用的是sublime+python若干插件(居然还挺凑合,比较喜欢sublime的暗黑简约风格)
------------------------------------------------------end--------------------------------------------------------
------------------------------------------------------end--------------------------------------------------------
共同学习,写下你的评论
评论加载中...
作者其他优质文章