文章目录
1.概述
⑴Python的优缺点
- Python的优点
- 解释型语言,天生具有平台可移植
- 支持两种主流的编程范式(面向对象编程和函数式编程)都提供了支持
- 可扩展性和可嵌入性,可以调用C/C++代码,也可以在C/C++中调用Python
- Python的缺点
- 执行效率稍低,因此计算密集型任务可以由C/C++编写
- 代码无法加密
- 在开发时可以选择的框架太多(如Web框架就有100多个),有选择的地方就有错误
⑵代码注释
- 单行注释 - 以#和空格开头的部分
- 多行注释 - 三个引号开头,三个引号结尾
⑶Python运行机制
- 执行a.py文件,如果不存在import命令,则对a.py代码进行编译,生成中间字节码PyCodeObject,以a.pyc的格式存储。
- 如果引用了b.py则会检查b.py是否被编译生成了b.pyc,如果存在还需要检查b.pyc的修改时间是否等于源文件最近的修改时间,如果一样,则直接调用b.pyc。
- 中如果检查不存在b的pyc文件或者b.pyc文件修改时间与源文件最近修改时间不对应,则需要重新对b.py文件进行编译,产生中间字节码,存储与b.pyc中,再根据字节码进行解释执行。
⑷Python和Java的区别
- JAVA执行速度快
- python入门简单
- Java需要先编译代码,而Python不用编译就能运行
2.基础语法
⑴python常用数据类型
- 整型,python3支持int类型和二进制,八进制,十进制,十六进制表示法。
- 浮点型,小数
- 字符串型,单引号或双引号括起来的任意文本,还有原始字符串表示法、字节字符串表示法、Unicode字符串表示法,而且可以书写成多行的形式(用三个单引号或三个双引号开头,三个单引号或三个双引号结尾)
- 布尔型,布尔值只有True、False两种值
- 复数型,形如3+5j,跟数学上的复数表示一样,唯一不同的是虚部的i换成了j
⑵变量命名
- 变量名由字母(广义的Unicode字符,不包括特殊字符)、数字和下划线构成,数字不能开头。
- 大小写敏感(大写的a和小写的A是两个不同的变量)。
- 不要跟关键字(有特殊含义的单词,后面会讲到)和系统保留字(如函数、模块等的名字)冲突。
⑶变量使用
- 用小写字母拼写,多个单词用下划线连接
- 受保护的实例属性用单个下划线开头
- 私有的实例属性用两个下划线开头
⑷运算符
⑸if语句
if、elif和else关键字,Python中没有用花括号来构造代码块而是使用了缩进的方式来设置代码的层次结构,如果if条件成立的情况下需要执行多条语句,只要保持多条语句具有相同的缩进就可以了,换句话说连续的代码如果又保持了相同的缩进那么它们属于同一个代码块,相当于是一个执行的整体。
"""
分段函数求值
3x - 5 (x > 1)
f(x) = x + 2 (-1 <= x <= 1)
5x + 3 (x < -1)
"""
x = float(input('x = '))
if x > 1:
y = 3 * x - 5
else:
if x >= -1:
y = x + 2
else:
y = 5 * x + 3
print('f(%.2f) = %.2f' % (x, y))
⑹循环结构
在Python中构造循环结构有两种做法,一种是for-in循环,一种是while循环。也是有break和continue的。
for-in循环
- range(101)可以产生一个0到100的整数序列
- range(1, 100)可以产生一个1到99的整数序列
- range(1, 100, 2)可以产生一个1到99的奇数序列,其中的2是步长,即数值序列的增量
sum = 0
for x in range(2, 101, 2):
sum += x
print(sum)
while循环
import random
answer = random.randint(1, 100)
counter = 0
while True:
counter += 1
number = int(input('请输入: '))
if number < answer:
print('大一点')
elif number > answer:
print('小一点')
else:
print('恭喜你猜对了!')
break
print('你总共猜了%d次' % counter)
if counter > 7:
print('你的智商余额明显不足')
⑺函数
在Python中可以使用def关键字来定义函数,在函数名后面的圆括号中可以放置传递给函数的参数,而函数执行完成后我们可以通过return关键字来返回一个值。
在Python中,函数的参数可以有默认值,也支持使用可变参数。
- 默认值
from random import randint
def roll_dice(n=2):
"""
摇色子
:param n: 色子的个数
:return: n颗色子点数之和
"""
total = 0
for _ in range(n):
total += randint(1, 6)
return total
def add(a=0, b=0, c=0):
return a + b + c
# 如果没有指定参数那么使用默认值摇两颗色子
print(roll_dice()
print(add())
print(add(1))
# 传递参数时可以不按照设定的顺序进行传递
print(add(c=50, a=100, b=200))
- 可变参数
def add(*args):
total = 0
for val in args:
total += val
return total
print(add())
print(add(1))
3.面向对象
⑴概述
在Python中可以使用class关键字定义类
class Student(object):
# __init__是一个特殊方法用于在创建对象时进行初始化操作
# 通过这个方法我们可以为学生对象绑定name和age两个属性
def __init__(self, name, age):
self.name = name
self.age = age
def study(self, course_name):
print('%s正在学习%s.' % (self.name, course_name))
# PEP 8要求标识符的名字用全小写多个单词用下划线连接
# 但是部分程序员和公司更倾向于使用驼峰命名法(驼峰标识)
def watch_movie(self):
if self.age < 18:
print('%s只能观看《熊出没》.' % self.name)
else:
print('%s正在观看岛国爱情大电影.' % self.name)
然后我们可以通过下面的方式使用这个对象:
def main():
# 创建学生对象并指定姓名和年龄
stu1 = Student('骆昊', 38)
# 给对象发study消息
stu1.study('Python程序设计')
# 给对象发watch_av消息
stu1.watch_movie()
stu2 = Student('王大锤', 15)
stu2.study('思想品德')
stu2.watch_movie()
if __name__ == '__main__':
main()
属性和方法的访问权限只有两种,也就是公开的和私有的,如果希望属性是私有的,在给属性命名时可以用两个下划线作为开头,在实际开发中,不建议将属性设置为私有的,因为这会导致子类无法访问(后面会讲到),Python程序员会遵循一种命名惯例就是让属性名以单下划线开头来表示属性是受保护的,本类之外的代码在访问这样的属性时应该要保持慎重
class Test:
def __init__(self, foo):
self.__foo = foo
def __bar(self):
print(self.__foo)
print('__bar')
def main():
test = Test('hello')
# AttributeError: 'Test' object has no attribute '__bar'
test.__bar()
# AttributeError: 'Test' object has no attribute '__foo'
print(test.__foo)
if __name__ == "__main_