Python基础入门学习
总体介绍
本文使用的实验编程环境是:jupyter lab、python3.7.6。
推荐大家自己手敲过一遍。项目已上传到GitHub。
一、算术运算
1 | 1+(100-20)/4+5*2 #四则运算 |
输出:31.0
1 | 2**10 #乘方运算 |
输出:1024
1 | 7%5 #求模运算 |
输出:2
1 | 7//5 #地板除法(整除) |
输出:1
1 | abs(-1) #绝对值运算(适用于float、int和复数类型。返回是float和int类型) |
输出:1
1 | import math |
1 | math.fabs(-5) #绝对值运算(只适用于float、int类型。返回是float类型) |
输出:5.0
1 | math.sin(math.pi/2) #三角函数运算 |
输出:1.0
1 | math.log(math.e) #对数运算(log默认以e为底) |
输出:1.0
1 | math.factorial(5) # 阶乘运算 |
输出:120
1 | (1 + 2j) + (3 - 1j) #复数运算 |
输出:(4+1j)
1 | complex(2,1)/(2+1j) #复数运算 |
输出:(1+0j)
1 | #math.factorial(1000) + 2**100 #强大的计算器 |
二、输入输出
输入:input
输出:print
1 | #input 输入的都是字符串 |
1 | 输出: |
1 | #利用float函数将字符串转换成浮点数 |
1 | 输出: |
1 | #利用eval函数将输入的字符串作为表达式进行计算 |
1 | 输出: |
1 | #输出用print,print()里变量用逗号(,)隔开即有:默认的 sep=' '分隔符,end='\n'结尾符 |
输出:’your weight is:60kg’
1 | #或者直接使用f-string(python3.6及以上版本) |
输出:’your age is:22’
三、导入模块
import …
或 from … import …
或 import … as …
1 | ### 以普通方式导入 |
输出:datetime.date(2020, 4, 12)
1 | ### 导入模块中某个对象 |
输出:datetime.datetime(2020, 4, 12, 1, 16, 44, 79453)
1 | ### 导入模块中全部对象 |
1 | 输出: |
1 | ### 以简写方式导入模块 |
输出:datetime.datetime(2020, 4, 12, 1, 20, 44, 994886)
四、语法规则
1、标识符
标识符由字母、数字、下划线组成,区分大小写,不能以数字开头。
以下划线开头的标识符有特殊含义。以单下划线开头的(_foo)代表不能直接访问类属性,以双下划线开头的(foo)代表类的私有成员;以双下划线开头和结尾的(__foo)代表Python里特殊方法专用的标识,如init()代表类的构造函数。
1 | import numpy as np |
输出:’1.18.2’
2、缩进
Python的代码块不使用大括号或者其他来控制类、函数、以及其他逻辑判断,而是使用缩进来实现代码分组。通常用四个空格来进行缩进。
1 | a, b = 1, 2 |
输出:2
3、注释
Python中单行注释采用 # 开头。多行注释在代码块首尾分别使用三个单引号(‘’’)或三个双引号(“””)。
1 | """ |
输出:5
4、一条语句粉多行显示
Python语句中一般以新行作为语句的结束符。
但是我们可以使用反斜杠()将一行的语句分为多行显示。
如果有{},[],()跨行则可以不使用\。
1 | print(1+2+3+4+5+6+\ |
1 | 输出: |
5、同一行显示多条语句
Python可以在同一行中使用多条语句,语句之间使用分号分割。
1 | a = 1; b = a + 5 |
输出:1 6
五、Python数据结构概述
Python内建的数据结构有列表,元组,字符串,集合,字典等。
此外常用的还有numpy中的array
,以及pandas中的dataframe
和series
。
1、有序数据结构:
list
(列表),是有序集合,没有固定大小,可以通过对偏移量以及其他方法修改列表大小。基本形式如:[1,2,3,4]
tuple
(元组),是有序集合、不可变的,可以进行组合和赋值运算后会生成一个新的元组。基本形式如:(1,3,5,7)
str
(字符串),是有序集合,基本形式如:’hello’
1 | #有序数据结构可通过下标访问数据 |
1 | 输出: |
2、无序数据结构
set
(集合),是一个无序不重复元素的集合。基本功能包括关系运算和消除重复元素。基本形式如:{‘apple’,’orange’,’banana’}
dict
(字典),是无序的键值对的集合。**键必须是互不相同的(在同一个字典之内)**,可通过键访问其值。基本形式如:{‘ICBC’:95588,’BOC’:95566}
1 | d = {'ICBC':95588,'BOC':95566} |
输出:95566
3、小知识:浅拷贝和深拷贝
浅拷贝(不可变类型tuple利用赋值):只是原来对象的一个别名即做更改拷贝后的对象会改变原来的对象
深拷贝(可变类型利用copy()函数):会开辟新的内存空间即做更改拷贝后的对象不会改变原来的对象
列表list
1 | ### 1、建立列表 |
输出:
['apple', 'orange', 'banana']
[1, 3, 5, 7, 9]
[1, 2, 4, 8, 16]
[[0, 1, 2], [1, 2, 3]]
1 | ### 2、访问列表 |
输出:
1,5
[1, 3]
[1, 3]
[1, 2, 3, 4, 5]
[1, 2, 3, 4]
[1, 3, 5]
1 | ### 3、修改列表 |
输出:
[0, 2, 3, 4, 5]
[0, 3, 4, 5]
[0, 3, 4, 5, 0, 3, 4, 5, 0, 3, 4, 5]
[0, 3, 4, 5, 0, 3, 4, 5, 0, 3, 4, 5, 6, 7, 8, 9]
1 | ### 4、列表常用函数 |
输出:
16
9
0
[0, 0, 0, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 0, 0, 0]
1 | ### 5、列表常用方法 |
输出:
[7, 8, 9, 10, 11, 12]
[1, 7, 8, 9, 10, 11, 12]
字典dict
字典在插入元素和查找元素方面很多时候比列表更加高效。
1 | ### 1、创建字典 |
输出:
{1: 3, 2: 4, 3: 6}
{'a': 1, 'b': 2}
{'x': 1, 'y': 2}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
1 | ### 2、字典常用操作 |
输出:
{'a': 3, 'b': 2, 'c': 5}
{'a': 3, 'b': 4, 'c': 5, 'd': 8}
1 | a.keys() |
输出:dict_keys([‘a’, ‘b’, ‘c’])
1 | a.values() |
输出:dict_values([3, 2, 5])
1 | a.items() |
输出:dict_items([(‘a’, 3), (‘b’, 2), (‘c’, 5)])
1 | d = {'a':3,'b':4,'c':5,'d':8} |
输出:
4
{'a': 3, 'b': 4, 'c': 5, 'd': 8}
{'a': 3, 'b': 4, 'c': 5, 'd': 8, 'e': 4}
字符串str
1 | ### 1、创建字符串 |
输出:
12345
I'm Clark.
I just use Python to say:"hello world"!
1 | s2 = "I'm Clark.\nI just use Python to say:\"hello world\"!" |
输出:
I'm Clark.
I just use Python to say:"hello world"!
1 | s3 = '''I'm Clark. |
输出:
I'm Clark.
I just use Python to say:"hello world"!
1 | ### 2、字符串拼接(+,join) |
输出:
I'm Clark.
I love Python.
I just use Python to say:"hello world"!
1 | print('\n'.join([s1,s2,s3])) #join拼接 |
输出:
I'm Clark.
I love Python.
I just use Python to say:"hello world"!
1 | 'abc' * 5 #乘法有复制效果 |
输出:’abcabcabcabcabc’
1 | ### 3、字符串的常用方法 |
1 | 输出: |
1 | "\n123abc\t".strip() #strip()方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列 |
输出:’123abc’
1 | "$$$$abcdef$$$xyz".replace('$','') #用空字符串代替$ |
输出:’abcdefxyz’
1 | ### 4、格式化字符串(%或format或f-string) |
1 | fs = "I'm %d years old. My weight is %.2f kg. I like %s." %(age,weight,hobby) # %格式化 |
输出:I’m 22 years old. My weight is 60.50 kg. I like travelling.
1 | fs = "I'm {} years old. My weight is {:.2f} kg. I like {}." .format(age,weight,hobby) # format格式化 |
输出:I’m 22 years old. My weight is 60.50 kg. I like travelling.
1 | fs = f"I'm {age} years old. My weight is {weight:.2f} kg. I like {hobby}." # f-string格式化(python3.6版本及以上可以使用) |
输出:I’m 22 years old. My weight is 60.50 kg. I like travelling.
元组tuple
1 | ### 1、创建元组 |
输出:
(1, 2, 3)
()
(1,)
(1, 2)
1 | y = tuple([1,2,3]) |
输出:
(1, 2, 3)
('a', 'b', 'c')
1 | ### 2、使用元组 |
输出:
3
5
1 | #序列解包 |
输出:
1
2
1
2
3
1 | #元组可以作为字典的key |
输出:{(1, 2): 4}
集合set
1 | ### 1、创建集合 |
输出:
{1, 2, 3}
set()
{0, 1, 4, 9, 16}
1 | ### 2、使用集合 |
输出:{1, 2, 3, 4, 5, 6}
1 | s1 = {1,2,3,5,6} |
输出:
{2, 5, 6}
{1, 2, 3, 5, 6, 7, 8}
{1, 3}
六、条件语句 if
1 | ### 1、if语句 |
输出:
3
3
1 | ### 2、逻辑运算符 |
输出:True
1 | ### 3、and和or |
输出:[1, 2]
1 | # 注意空字符串、空列表、空字典、空元组和空集合以及0的bool值为false |
输出:(False, False, False, False, False, False)
七、循环语句 for,while
1 | ### 1、for循环 |
输出:1 2 3 4 5 6
1 | d = {'a':1,'b':2,'c':3} |
输出:
a : 1
b : 2
c : 3
1 | # for循环实现九九乘法表 |
输出:
1 x 1 = 1
1 x 2 = 2 2 x 2 = 4
1 x 3 = 3 2 x 3 = 6 3 x 3 = 9
1 x 4 = 4 2 x 4 = 8 3 x 4 = 12 4 x 4 = 16
1 x 5 = 5 2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25
1 x 6 = 6 2 x 6 = 12 3 x 6 = 18 4 x 6 = 24 5 x 6 = 30 6 x 6 = 36
1 x 7 = 7 2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35 6 x 7 = 42 7 x 7 = 49
1 x 8 = 8 2 x 8 = 16 3 x 8 = 24 4 x 8 = 32 5 x 8 = 40 6 x 8 = 48 7 x 8 = 56 8 x 8 = 64
1 x 9 = 9 2 x 9 = 18 3 x 9 = 27 4 x 9 = 36 5 x 9 = 45 6 x 9 = 54 7 x 9 = 63 8 x 9 = 72 9 x 9 = 81
1 | ### 2、while循环 |
输出:5050 101
1 | # 打印斐波那契(Fibonacci)数列。这个数列前两项为 1,之后的每一个项都是前两项之和。 |
输出:1 1 2 3 5 8 13 21 34 55 89
1 | # while循环实现九九乘法表 |
输出:
1 x 1 = 1
1 x 2 = 2 2 x 2 = 4
1 x 3 = 3 2 x 3 = 6 3 x 3 = 9
1 x 4 = 4 2 x 4 = 8 3 x 4 = 12 4 x 4 = 16
1 x 5 = 5 2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25
1 x 6 = 6 2 x 6 = 12 3 x 6 = 18 4 x 6 = 24 5 x 6 = 30 6 x 6 = 36
1 x 7 = 7 2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35 6 x 7 = 42 7 x 7 = 49
1 x 8 = 8 2 x 8 = 16 3 x 8 = 24 4 x 8 = 32 5 x 8 = 40 6 x 8 = 48 7 x 8 = 56 8 x 8 = 64
1 x 9 = 9 2 x 9 = 18 3 x 9 = 27 4 x 9 = 36 5 x 9 = 45 6 x 9 = 54 7 x 9 = 63 8 x 9 = 72 9 x 9 = 81
1 | ### 3、循环控制 continue,break |
输出:
hello
helloworld
1 | ### 4、循环中的else |
输出:0 1 2 3 4 Bye bye
- Python中循环的 else 子句给我们提供了检测循环是否顺利执行完毕的一种优雅方法
八、函数
1 | ### 1、函数参数:普通参数,默认参数,可变参数,关键字参数 |
输出:5
1 | # 默认参数 n(参数缺失时赋默认参数且默认参数定义时必须写在普通参数后) |
输出:125
1 | # 可变参数 *args(可以传入不定长度的参数序列---元组或列表) |
输出:6
1 | # 关键字参数 **kv(可以传入字典) |
输出:{‘name’: ‘Clark’, ‘age’: 22, ‘grade’: ‘一班’, ‘hometown’: ‘hunan’}
1 | ### 2、递归函数 |
输出:89
1 | ### 3、装饰器 |
1 |
|
1 | my_sum(*range(100)) |
输出:
my_sum is called. 0.0s are used.
4950
1 | my_sum(1,2,3) #相当于 decorater(my_sum)(1,2,3) |
输出:
my_sum is called. 0.0s are used.
6
1 |
|
输出:
fib is called. 0.0s are used.
fib is called. 0.0s are used.
fib is called. 0.0s are used.
fib is called. 0.0s are used.
fib is called. 0.0s are used.
3
九、lambda匿名函数
lambda只是一个表达式,适合定义较为简单的函数,不可在里面写循环。
lambda函数的定义语法是:
fun = lambda
参数序列:返回值表达式
一般来说通过使用lambda匿名函数可以节约程序开支并加快运行速度。
1 | my_abs = lambda x:x if x>=0 else -x |
输出:5
1 | my_power = lambda x,n=2:x**n |
输出:25
1 | (lambda x,n=2:x**n)(-5,3) |
输出:-125
1 | my_sum = lambda *args:sum(args) |
输出:6
1 | student = lambda name,age,**kv:dict(name = name,age = age,**kv) |
输出:{‘name’: ‘HD’, ‘age’: 22, ‘grade’: ‘一班’, ‘gender’: ‘male’}
1 | fib = lambda n:1 if n in [1,2] else fib(n-1) + fib(n-2) |
输出:89
十、高阶函数
以函数为参数的函数称为高阶函数。常用的内置高阶函数有:map,reduce,filter。
高阶函数和匿名函数搭配使用,堪称绝配。
1 | ### 1、map将一个函数的方法作用到一个序列或者多个序列,且map返回的是map object |
输出:[1, 4, 9, 16]
1 | list(map(lambda x,y:x+y,'abc','123')) #字符串中+号是拼接作用 |
输出:[‘a1’, ‘b2’, ‘c3’]
1 | ### 2、reduce将一个带有两个参数的函数的方法依次迭代作用到一个序列 |
输出:10
1 | ### 3、filter根据一个函数(函数返回值最好是bool值)的规则过滤序列中的元素,且filter返回值返回的是filter object |
输出:[1, 2]
十一、Python推导式
Python中的推导式是我最喜爱的一类语法规则,没有之一。
Python推导式可以生成列表、字典和集合。
Python推导式虽然简单,但表达能力很强,可以实现map,filter等功能,并且可以多重遍历。
淋漓尽致地体现了Python语言的simple,readable,powerful的特点。
1 | ### 1、列表推导式 |
输出:[(‘Jim’, ‘Mary’), (‘Jim’, ‘Lily’), (‘John’, ‘Mary’), (‘John’, ‘Lily’)]
1 | ### 2、字典推导式 |
输出:{1: ‘Winter’, 2: ‘Summer’, 3: ‘Autumn’, 4: ‘Spring’}
1 | list(enumerate(seasons,start=1)) |
输出:[(1, ‘Winter’), (2, ‘Summer’), (3, ‘Autumn’), (4, ‘Spring’)]
1 | keys = ['a','b','c'] |
输出:{‘a’: 1, ‘b’: 2, ‘c’: 3}
1 | list(zip(keys,values)) |
输出:[(‘a’, 1), (‘b’, 2), (‘c’, 3)]
1 | ### 3、集合推导式 |
输出:{2, 4}
十二、类和对象
1、面向对象基本概念
- 什么是面向过程编程和面向对象编程?
面向过程编程(POP:Process Oriented Programming).程序被看成一系列命令的依次执行。基本封装形式为函数。
设计函数的基本要点是IPO:输入input——>处理Process——>输出Output.
面向对象编程(OOP:Object Oriented Programming).程序被看成一系列对象的相互作用。基本的封装形式是类。
设计类的基本要点是RPM:关系Relation,属性Property,方法Method.
- 面向对象基本术语?
类:class,抽象数据结构,数据和算法的封装。如:定义一个类:dog。
对象:object,类的实例。如:dog类的一个实例:点点dot。
属性:properties,和对象关联的数据部分。如:weight体重,breed品种。
方法:methods,和对象关联的算法部分。如:run(),eat(),bark()。
- 面向对象编程的优点?
容易使用:封装,奇妙的句点符号。
容易扩展:继承,多态。
2、创建类和对象
1 | # 创建一个Dog类 |
输出:
Husky
giao is running...
Bowwow,Bowwow,Bowwow...
giao is eating meat...
I think I'm a hero and very handsome!
HaHaHa!!!
Zzz...Zzz...Zzz...
3、获取对象信息
1 | # Python中万物皆对象。对象由类创建而来,所有的类都是object基类的子类。 |
输出:True
十三、封装和继承
1、封装
奇妙的句点符号:通过奇妙的句点符号可以召唤对象的属性和方法。
私有属性和私有方法除外。
(1) 公有属性和公有方法
(2) 私有属性和私有方法:以双下划线开头
(3) 定制属性和定制方法:以双下划线开头和双下划线结尾
__init__
构造函数,通过类名调用
__str__
通过str函数调用
__len__
通过len函数调用
……
(4) 类属性和类方法:在__init__
外部定义的为类属性,第一个参数不是self参数的方法为类方法。
1 | class Animal(object): |
输出:
No deal,no hurt!
giao is running...
giao is running...
11
2、继承
1 | # 子类可以通过继承获得父类的属性和方法 |
输出:
kitty is running...
MiaoMiaoMiao...
I think I'm a hero and very handsome!
MiaoMiaoMiao...
十四、模块和包
一个.py文件就是一个模块。
一个包含有__init__
.py文件的文件夹就是一个包。
1、模块示范
- 写入一个my_nodule的模块:
1 | %%writefile my_module.py |
输出:Overwriting my_module.py
1 | #测试一下模块 |
1 | my_module.__author__ |
输出:’HD’
1 | my_module.__doc__ #查看模块注释 |
输出:’a test module’
1 | !python my_module.py #执行脚本 |
输出:
hello world
hello China
Contact to me: hedi1117@126.com
Learn more with me: 学长说python
2、包示范
- 建立一个Animal文件夹:
1 | !mkdir Animal |
1 | %%writefile Animal/__init__.py |
输出:Writing Animal/__init__.py
1 | %%writefile Animal/Animal.py |
输出:Writing Animal/Animal.py
1 | %%writefile Animal/Cat.py |
输出:Writing Animal/Cat.py
1 | %%writefile Animal/Dog.py |
输出:Writing Animal/Dog.py
1 | #测试一下包 |
1 | from Animal.Dog import Dog |
输出:Bowwow…Bowwow…Bowwow…
1 | from Animal.Cat import Cat |
输出:miaoao…miaoao…miaoao…
十五、异常处理模块
1、捕捉异常的关键字语句:
try...except...finally...
1 | import math |
2、抛出异常的关键字语句:
raise...
1 | #定义一个异常类 |
十六、文件操作
Python文件操作中的步骤:
open->操作->close
1 | #创建并打开file.txt空文件,以'w'形式写入文件 |
以上下文管理器 with
进行文件操作
1 | # with操作可自动关闭文件 |
十七、学习资料
原文作者: 贺同学
原文链接: http://clarkhedi.github.io/2020/04/14/python-ji-chu-ru-men-xue-xi/
版权声明: 转载请注明出处(必须保留原文作者署名原文链接)