【Python】python入门笔记(java对比版)
这里记录一下python的学习笔记,主要是看菜鸟教程,熟悉一下python语法
菜鸟教程的链接: https://m.runoob.com/python/
python环境搭建没有什么特别的,就是安装python的时候记得勾上创建环境变量一栏。
我的环境:python3.7,本人有一定的java基础,所有很多和java相似的就不做记录了,主要是做个对比增强记忆。
1、基本变量类型和运算符
1.1、基本变量类型:
- 数字(理解为java里面的基本变量)
- 字符串 (String)
- 列表 (list)
- 元组 (不可变list)
- 字典 (Map)
其中数字分为
- int
- long(已删除)
- float
- complex
注意这里long在python已经没有了,超过int自动转换为long类型,这也符合python语言智能的特性
最基本的使用
# input("按下 enter 键退出,其他任意键显示...\n")
#python3将long移除了,超过int自动转成long
a, b, c, d = 1, 51924361, 0.0, 3.14j
#列表,元组(不可变列表),字典(集合)
list = [1, 2, 3]
tuple = (123, 'john')
dict = {}
dict[1] = 123
dict[2] = '123'
# 可变集合
set1 = set(dict)
# 集合增和删,没有改
print(set1)
set1.remove(1);set1.add(123);
print(set1)
# 不可变集合
set2 = frozenset(range(10))
print(set2)
类型之间的转换比java方便许多,不用调用Arrays、Collections等类,直接“强转”就行:
int(x [,base ]) 将x转换为一个整数
long(x [,base ]) 将x转换为一个长整数
float(x ) 将x转换到一个浮点数
complex(real [,imag ]) 创建一个复数
str(x ) 将对象 x 转换为字符串
repr(x ) 将对象 x 转换为表达式字符串
eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s ) 将序列 s 转换为一个元组
list(s ) 将序列 s 转换为一个列表
chr(x ) 将一个整数转换为一个字符
unichr(x ) 将一个整数转换为Unicode字符
ord(x ) 将一个字符转换为它的整数值
hex(x ) 将一个整数转换为一个十六进制字符串
oct(x ) 将一个整数转换为一个八进制字符串
1.2、运算符
运算符其他和java一样,只有 ** 这个是幂运算是特有的
a ** b = a的b次方
Python 中数学运算常用的函数基本都在 math 模块、cmath 模块中。
Python math 模块提供了许多对浮点数的数学运算函数。
Python cmath 模块包含了一些用于复数运算的函数。
cmath 模块的函数跟 math 模块函数基本一致,区别是 cmath 模块运算的是复数,math 模块运算的是数学运算。
2、python条件运算
if elif else 这里和Java很类型,只不过多了个:标志位
if 判断条件1:
执行语句1……
elif 判断条件2:
执行语句2……
elif 判断条件3:
执行语句3……
else:
执行语句4……
while 和 for 也基本一致,多加了 : 号 不多做介绍
3、I/O
3.1、基本的输出输入
输入:input (enter中断)
输出:print (和C++很像哈哈)
不换行输出:print(1, end="")
3.2、文件
file object = open(file_name [, access_mode][, buffering])
- file_name:file_name变量是一个包含了你要访问的文件名称的字符串值。
- access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
- buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
还有一些close()、write()、read()、rename()、remove()、mkdir()、tell()(输出文件位置)方法看名字就知道是什么意思了,具体的参数可以看源码不做记录了。
4、python面向对象
python虽然不像java一样,一切都是类,但是也是面向对象的语言
这里主要记录一下和java类不同的几处地方:
- python声明类标志位是 : 而不是{} 例如 class test :
- 权限只有protected和private, _变量名/函数(protected) 和 __变量名/函数(private)
- 参数可以声明类型,通过 变量名:变量类型 这样的方式,也可以不声明
- 还有一些只是名字不一样,例如this和self(这个是可以改的),构造函数叫__init__
- 有一个和C++很类似的析构函数__del__用来垃圾回收
- 类的继承通过参数里写父类替代extends
class Test:
name = "", __age, _id
def __init__(self, name): # 这里叫什么名字,this就是什么名字,叫this也可以哈哈
print(self.__class__)
self.name = name;
def __del__(self):
class_name = self.__class__.__name__
print(class_name, "销毁")
test = Test("wcy")
print(test.name)
class test2(Test): # 这就是继承父类了,还可以写多个代表继承多个
def __init__(self):
print("调用子类构造方法")
5、python正则表达式
用的是re模块,下面的函数和java的使用大同小异,通过参数来控制匹配方式
5.1、生成正则表达式
re.compile 函数 和 java里的Pattern p = Pattern.compile()类似;
re.compile(pattern[, flags])
flags : 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:
re.I 忽略大小写
re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
re.M 多行模式
re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
re.X 为了增加可读性,忽略空格和 # 后面的注释
5.2、re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none。
re.match(pattern, string, flags=0)
print(re.match('www','www.123.com'))
print(re.match('www','www.123.com').span())
print(re.match('com','www.123.com'))
console:
print(re.match('www','www.123.com'))
print(re.match('www','www.123.com').span())
print(re.match('com','www.123.com'))
我们可以使用 group(num) 或 groups() 匹配对象函数来获取匹配表达式。
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
print "matchObj.group() : ", matchObj.group()
print "matchObj.group(1) : ", matchObj.group(1)
print "matchObj.group(2) : ", matchObj.group(2)
else:
print "No match!!"
console:
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
5.3、re.search函数
re.search 扫描整个字符串并返回第一个成功的匹配。
re.search(pattern, string, flags=0)
5.4、检索和替换
compile类似于java里面的replace
re.sub(pattern, repl, string, count=0, flags=0)
pattern : 正则中的模式字符串。
repl : 替换的字符串,也可为一个函数。
string : 要被查找替换的原始字符串。
count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
还有一些findall、finditer、split等方法和java类