Python基础
来源:互联网 发布:淘宝网天猫手机支架 编辑:程序博客网 时间:2024/06/05 21:57
Python语言主要有两个版本。Python2和Python3。在命令行中python
默认是Python2,使用python3
则使用Python3。
- Mac下安装iPython的方法
sudo easy_install pip sudo pip install ipython #sudo pip3 install ipython
注释
- 使用
#
开头的是单行注释。 - 三个单引号或者三个双引号是多行注释
'''这是注释'''
vi xxx.py +lineNumber 直接跳转到lineNumber行进行编辑
编码
py文件中如果有中文,则使用python执行时会报错,python3不会错。解决方法是在第一行加#coding=utf-8
或者 #-*- coding=utf-8 -*-[推荐]
输入
a = input("请输入...")
在python2中,输入的内容是当做代码的。肉疼…
在python3中,输入的内容都当做是字符串
在python中使用raw_input()来实现python3中的input()功能
占位符
name = "bendeng"print("My name is %s"%name)print("My name is %s,%s,%s"%(name,name,name))f = "My name is %s,%s,%s"%(name,name,name)f = "My name is" + name + name + name
%s
表示字符串,%d
表示数字
变量
使用type(variable)来判断变量的数据类型字符串转整形: int_var = int(str),其它变量转换类似
变量名由字母、下划线和数字组成,且数字不能开头。
查看系统的关键字
import keyword keyword.kwlist
运算符
!=或者<>是不等于or and 相当于其它语言的 || &¬ 相当于 取反符号!for variable in array: #TODO""、0、None、[]、{} 在python中判断时为False
字符串
name = "bendeng"name[2] ->nname[-2] ->n 负数表示倒数第几个
- 切片
name[2:5] ->nde取出第一个索引位置到第二个索引-1位置的一片字符串name[起始位置:终止位置:步长] 步长默认为1逆序:name[-1::-1]或者name[::-1]
- 操作
- find
name.find("en") ->1
- rfind
name.rfind("en") ->4
- index rindex 类似于find,找不到抛异常
- count
name.count("en") ->2
- replace
name.replace("en","EN") -> bENdENg | name.replace("en","EN",1) ->bEndeng
- split
name.split("en") ->['b', 'd', 'g']
- str.split() 默认以多种空白字符串切割
- endswith
name.endswith("ng") -> True
- startwith
name.startswith("be") -> True
- lower
name.lower()
- upper
name.upper() ->BENDENG
- rjust
name.rjust(10) ->' bendeng'
- center
name.center(10) -> ' bendeng '
- ljust
name.ljust(10) -> 'bendeng '
- lstrip 去左空格
- rstrip 去右空格
- strip 去左右空格
- partition
name.partition("en") -> ('b', 'en', 'deng')
- rpartition
- splitlines
name = "ben\ndeng" name.splitlines() ->['ben', 'deng']
- isalpha 是否是纯字母
- isdigit 是否是纯数字
- isalnum 是否是字母数字
- isspace 是否是纯空格
- join
str1.join(arr1) 使用str1连接arr1
- find
列表
Python中的列表类似于其它语言的数组,不同的是Python中的列表元素可以是不同的数据类型。
names = ["bendeng","ada","ouyang"]#添加数据names.append("David")names.insert(0,"First") //在某个索引位置添加names2 = ["names1","names2"]names3 = names + names2 //两个列表直接相加names3 = names.extend(names2)append直接添加,extends是扩展,两者是有区别的。#删除数据names.pop() //弹出最后一个nams.remove(element) //根据element只删除第一个del names[index] // 删除某个索引#修改数据names[index] = newValue#查找element in names //使用in查找列表中是否存在某元素
字典
{key:value}
info = {'name':'bendeng','age':20}info['qq'] = '123456' #添加或修改del info['qq'] #删除info['qq'] 或 info.get('qq') #查询。后者不会崩溃info.keys() #返回key的列表info.values() #返回values的列表info.items() #返回key-value(元组)的列表
元组
元组和列表用法极其类似。但不同的是使用()表示,而且定义后不可修改,只可查询和遍历。
name = ('ben','deng')a,b = name
- 元组只有一个元素,使用(a,) 表示
- 两个变量交换值,可以使用
a,b = b,a
函数
def function_name(): code...在函数中使用global关键字修饰的变量会变成全局变量。
- 缺省参数和命名参数
只能放在参数列表的最后定义,可以多个。
def function_name(a,b=defaultValue,c=defaultValue): code...//调用function_name(A,B) #传给a,b两个形参function_name(A,c=valueC) #传给a,c两个形参。c=valueC叫命令参数。命名参数只能取形参的参数名
- 不定长参数
*args一般定义成args,也可以是其它变量,必须放在形参最后
def function_name(a,b,*args):#*args表示将满足形参个数多的参数给它,属于元组类型 code...def function_name(a,b,*args,**kwargs):#**kwargs是字典类型的不定长参数 code...
拆包
def function_name(a,b,*args,**kwargs): code...C = (c,)D = {'d':dv}
当调用function_name(A,B,C,D)
时,kwargs不会接受参数。这时需要拆包,调用方式如下:function_name(A,B,*C,**D)
* 表示拆元组,**拆字典,相当于调用function_name(A,B,c,'d':dv)
引用
id(var)
获取变量的地址
a = 1b = a
在python中,a,b都指向同一个内存地址,即变量100的地址。
可变与不可变
- python中,只有列表和字典可变,其他的数据类型不可变。
- python中的字典数据中只有不可变类型才可以当做key。
- python中的可变数据类型传参,会对可变数据类型变量进行修改
匿名函数
使用lambda
关键字进行匿名函数的定义。像Java8和Swift语言中的闭包。
def function_name(a,b,func): code...function_name(A,B,lambda x,y:x+y)
可以通过eval(Str)
将字符串转换成函数,比如eval("lambda x,y:x+y")
文件
r 只读模式。文件必须存在。
w 写模式,原来有内容则删除。文件不存在则创建。
a 追加模式。
rb 二进制模式只读。这是文件打开的默认模式。
wb 二进制打开只用于写入。
ab 二进制追加。
r+ 打开一个文件用于读写。文件指针件事放在文件开头
w+ 打开一个文件用于读写。文件不存在则创建。
a+ 打开一个文件用于读写。文件不存在则创建。追加模式
rb+
wb+
ab+
- 打开文件
f = open("1234.txt","w")
- 关闭文件
f.close()
- 读取文件
f.read() #读取文件所有的内容f.read(1) #读取1个字节,指针往下移
- 写入文件
f.write("") #写入内容。返回写入文件的长度
- 其他方法
readline()
#读取一行readlines()
#返回一个列表,每一行是元素seek(offsetBytes,0)
#文件定位。offsetBytes负数往左调,正数右调。python3不支持负数tell()
#返回文件当前的位置
- 重命名及删除
import osos.rename(newFileName,oldFileName)os.remove(fileName)
- 文件夹操作
import osos.mkdir(dirName) #创建目录os.rmdir(dirName) #删除目录os.chdir(dirName) #改变默认目录os.getcwd() #当前目录os.listdir('dirName') #获取某目录下的所有文件
面向对象
操作属性和方法的方式类似于JavaScript。
self和其它语言的this关键字类似
- 定义类
class 类名: 属性列表 property = value #在class体中定义的属性是类属性 __variable #以__开头的变量是私有属性,不会被子类继承 方法列表 def __new__(cls): // TODO return object.__new__(cls) #最后一定要调用父类的这个方法 def __init__(self): //TODO self一般这么写,可以写其它 def __str__(self): //TODO 类似于Java的toString方法 def __del__(self): //TODO python自动调用 def __privateMethod(): // #以__开头的是私有方法,不会被继承,也不能在子类中使用 #类方法 @classmethod def methodName(cls): #cls一般是这么写,可以写成其它; // TODO #静态方法 @staticmethod def methodName(): // TODO
在python中先调用的new方法创建对象,init负责初始化。这两者合起来类似父类的构造方法
- 创建对象
var = ClassName()
测量对象的引用计数:
import syssys.getrefcount(object)
- 继承
class ClassName(ParentClassName): 方法列表#调用父类的方法,类似于Java中的super.methodName();两种方法:1、ParentClassName.methodName(self)2、super().methodName()
- 多继承
class ClassName(Parent1,Parent2,...): // TODO
print(ClassName.__mro__)
#返回元组,方法调用的遍历顺序
- 单例模式
class ClassName(object): __instance = None def __new__(cls): if __instance == None: __instance = object.__new__(cls) return __instance else: return __instance
异常处理
try: // TODO #raise引发一个自定义的异常,类似于Java的throws raise CustomeException("my customer exception")except CustomeException: // TODOexcept (ExceptionName1,ExceptionName2): // TODOexcept Exception as expt:#上面未捕获到的异常一定在这里捕获,放到expt对象中可进行处理 // TODOelse: #没有异常执行此处 // TODO finally: #一定会执行到这里 // TODO
自定义异常类
class CustomeException(Exception): #Exception异常的基类 def __init__(self,message): //TODO
模块
- 安装模块
sudo pip install ModuleNamesudo pip3 install ModuleName #python3的安装方式
- 使用模块
import ModuleNameimport ModuleName as AliasModuleNamefrom ModuleName import functionNamefrom ModuleName import functionName1,functionName2from ModuleName import * #谨慎使用,后面不同模块的函数名和前面的同名,只会导入后面的函数名。
先搜索当前路径下的模块,找不到再去找系统路径下的模块。
moduleName.__file__ #返回模块的路径
if __name__ == "__main__" // TODO 如果直接运行,为True。作为模块给别人调用,为False
模块中的__all__
定义的是模块被引用的内容,from ModuleName import *
只能使用在__all__
中定义的属性、方法和类
__all__ = ["functionName","propertyName","className"]
包
将几个相关py(模块)文件放在同一个文件夹,在文件夹下创建__init__.py
文件,那么python将此文件夹视为包
。
1、python2必须在文件夹内添加
__init__.py
才能将文件夹当做包,python3则不必须
2、在__init__.py
中定义__all__
变量,决定包里能from的模块
3、[Python2]在__init__.py
中import moduleName,决定包里能import的模块
4、兼容Python3:使用from . import moduleName
模块发布
1、在当前目录新建一个setup.py
文件。在文件里写入
from distutils.core import setupsetup(name="bendeng", version="1.0", description="bendeng's module", author="bendeng", py_modules=['packageName.moduleName1', 'packageName.moduleName2'])
2、构建模块
python(python3) setup.py buildpython(python3) setup.py sdist
3、发布后安装
先将.tar.gz解压,cd到目录里
sudo python(python3) setup.py install
给程序传参
方式:
python xxxx.py params
实现
import syssys.argv #接收params参数
列表推导式
range(num,[num2],[step]) #生成一个列表。用法类似切片
range的风险:python2中使用很大的数字,会申请很大的内存。python3中,没有此风险,按需申请内存。
a = [i for i in range(num1,[num2],[step])] #列表生成式如:a = [i for i in range(10)]a = [10 for i in range(10)]a = [i for i in range(10) if i % 2 == 0]a = [(i,j) for i in range(10) for j in range(10)]
集合
a = (1,2,3) #元组b = [1,2,3] #列表c = {1,2,3} #集合。不能有重复元素,可以用于去重;支持增删改查。c = set(b) #列表转集合b = list(c) #集合转列表
- Python基础
- Python基础
- Python基础
- Python基础
- python基础
- Python基础
- python基础
- Python基础
- python 基础
- Python 基础
- python基础
- Python基础
- Python基础
- python基础
- Python基础
- python基础
- python基础
- Python基础
- 虚拟内存
- ReactNative基础---Networking
- Java API文档
- VPN连接时报741错误
- HttpServletResponse
- Python基础
- Mybatis中Mapper动态开发的注意点
- 【python】tensorflow一元二次函数拟合
- Spark源码的编译过程详细解读(各版本)(博主推荐)
- 时间管理
- 美团2018校招笔试
- Tyvj1052
- 观察者模式
- Eclipse 常用快捷键