Python基础笔记

2017/8/22 周二 晴

Linux在搭建好Python环境后的第一个hello world!

命令窗口

1.python

>>>2.print("hello world!")

2017/8/23 周三 台风

python命令的种类(按需安装):

python,ipython,python3,ipython3,功能一致,但有各自的特性,例如python(默认为python2)命令不能自动补全代码,而ipython可以自动补全代码

执行Python的3种方式

1.命令窗口输入python,在出现>>>后开始写代码,多用于测试

2.建一个XXX.py文件,写上代码,然后命令行python XXX.py,实际开发中最常使用

3.建一个XXX.py文件,写上代码,在文件开头加上#!/usr/bin/python(python命令的所在位置的绝对路径),在命令行./XXX.python

Python注释:
单行注释:#开头
多行注释:'''三个单引号'''
解决代码中出现中文问题
文件开头加上#coding=utf-8,等号两边没有空格,这中文问题出现于python2,而python3能够很好的识别中文,不加也可以
变量
#名字 = 值
age = 18 #数值
print(age)
name="hello" #字符串
name='world' #字符串

确定变量的类型

print(type(name))
str #字符串类型
注意点

print “heiil” #python可以正常运行,Python3不可以正常执行
print (“hhh”) #python2,3都可以正常执行

标识符和关键字

关键字不可做变量名

查看关键字列表

ipython3
import keyword #获取keyword工具箱
keyword.kwlist  #使用keyword工具箱的kwlist功能

2017/8/24 周四 台风

输出
print("dd")
\t #tab
\n #换行

name="Hello"
name2="World"
age=18
print(name+name2) #HelloWorld
print(name+age) #运行出错,类型不匹配

格式化输出,与C类似
print("%d岁"%age) #18岁   没有逗号分隔,但使用了%来分隔
heigh=173
print("%d岁%d厘米"%(age,height)) #18岁170厘米
查看方法文档
help(方法名)
dir(方法名)
输入

在python3:

name=input("请输入:")
print("%s"%name)

在python2:

#原样输入
name = raw_input("请输入:")
print("%s"%name)
#会自动计算表达式,如输入:3+4,最终会打印出:7
name = raw_input("请输入:")
print("%s"%name)
特别的运算符
// #相除取整数:5//2=2.0
** #取幂次方: 5**2=25

= 的特殊使用,交换两个变量的值
A=10
B=5
A,B=B,A
此时:
    A=5
    B=10
字符串转int
a=int("10")

num = int(input("请输入一个数字:"))
if判断语句
if 条件:
    事情

a=10
if a>5:
    print("a>5")
else:
    print("a<=5")

2017/8/25 周五 晴

逻辑运算符

and:相当于Java的&&

or:相当于Java的||

not :相当于Java的!

elif

相当于else if

if 嵌套
if
    if
        if
        else
产生随机数
import random
random.randint(int begin,int end) #产生begin-end的随机数包含begin和end在内
while循环
while 条件:
    语句体
字符串
"双引号里的内容"

'单引号里的内容'
for循环
for 临时变量 in 集合:
    循环体
切片
name = "abcdefg"
# name[0]=a
# name[0,4] = abcd 取出来的是下标0~3,不包括4的元素
    #可以这样理解,从0下标开始取,取4个元素
获取全部元素
name[0:]
name[:]
name[::]
#name[起始位置:结束位置:步长]
#name[::-1] 逆序
name="abcdef"
#name[-1]=f
#name[0:-1]=abcde
获取字符串的长度
len(name)
字符串常见操作

find

a = "hello world"
#a.+tab 提示可操作函数
a.find("hello")
>>0 #返回找到的下标
a.find("python")
>>-1 #找不到返回-1

rfind

从右边开始找,其余与find用法一致

index

与find类似,区别是找不到的不会返回-1,而是抛出异常

count

str.count("py")
str.count("py",begin,len)

replace

str2 = str.replace("py","aa") #替换所有
str2 = str.replace("py","aa",1) #替换一次

split

str.split(",") #根据逗号来切割为一个数组

startswith

str.startswith("a") #以"a"开头?是:返回True,否则返回False

endswith

str.endswith("a")

知识扩展

True-->非0: -100,1,123
False-->0

lower

str2= str.lower() #转小写

upper

str2= str.upper() #转大写

ljust

str.ljust(50)向左对齐

rjust

str.ljust(50)向右对齐

center

str.center(50) #居中显示

lstrip

str.lstrip(" ") #去除左边的空格

rstrip

str.rstrip("a") #去除右边的字符a

strip

str.strip(" ")#去除两边的空格

parttition

str.parttition(str2) #分隔成3个部分

rpartition

从右边开始找

splitlines

安照行分隔,根据换行符进行分隔

isalpha

是否都是字母

isdigit

是否都是数字

isalnum

是否字母或数字

join

str3 = str.join(str2) #字符串拼接
列表
list = ["ad",12,0.16]
列表的操作
append #添加一个元素,若添加一个列表,或直接将列表作为一个整体插进去

extend #添加一个元素,若元素为一个列表,会将该列表的每一个元素插进去

insert(1,a) #在下标1处插入

修改数据
list[0] = "ss"

是否在里面
"aa" in list 返回True或False
"aa" not in list

count

list.count("aa") #第几个,从1开始

index

下标

del

根据下标删
del list[1]

pop

删最后一个

remove
根据值删

排序

list.sort()#从小到大排序

list.reverse()#逆排序

list.sort(reverse=True) #逆排序
列表的嵌套
list2 = ["aa","55"]
list.append(list2)
aa=[["aa","nn"],[11,22]]
元组

元组的元素不能修改

aa=("aa","bb",123)

若元组只有一个值时

aa=(3.14,)#加个","来定义
字典
{key:value,key:value} #看上去真TMD像json

info = {"a":123,"b":"lll"}
#info["a"] = 123
不允许有两个相同的key,若在定义时有两个相同的可以则后面一个会覆盖前一个

info["aa"] #若aa不存在会报错
info.get("aa")#不报错
info.get("aa",123)#指定默认值123
字典的操作

改:

info["aa"]=456

增:

info["bb"]=456

删:

del info["aa"]
del info #删除整个变量(字典)
info.clear() #删除字典的所有的数据

查:

info.len()#长度
info.keys()#所有的key
info.values()#所有的value
info.items()#所有的key-value
字典的遍历
for a in info.keys()
    #键

for a in info.values()
    #值

for a in info.items()
    #(key,value)

for key,val in info.items()
    #key,val命名随意

2017/8/26 周六 昨晚打了两次plane

函数

定义

def 函数名():
    代码

调用

函数名()

函数的文档说明

def 函数名()
    "说明"
    代码
    '''
    说明
    '''

函数的参数

def 函数名(参数1,参数2...参数n)
    代码

函数的返回值

def 函数名()
    代码
    return 100
    return 200

只会返回第一个return

函数的嵌套

函数调用函数

def b()
    print("in b")

def a() 
    b()
    print("in a")

局部变量

在函数里定义的变量,形式参数

全局变量

在函数外定义的变量

在函数里不可以直接修改全局变量的值,
可以在函数里进行声明后再去修改,否则抛异常
函数里声明: global 变量名:不可变变量需要添加,可变的可以不加

通过列表,字典,元组(若return a,b等用逗号隔开默认是元组)把多个数据返回

对于元组:a,b=(1,2) #分别将1,2赋值给a,b

函数的默认参数:

def 函数名(参数a,c=30)
    代码

默认值只能从右至左设置


def aa(a,b,c=5,e=6)
    #...

aa(1,2,e=7) #给e传,不给c传
若指定参数名,则顺讯名可以随意
aa(b=5,a=100)

不定长参数

def aa(a,b,*args,**kwargs)
    #...

args为元组,kwargs为字典,默认传递args,指定名字时传递个kwargs,名字为key
aa(1,2,3,4,mn=1,mm=2)
#a=1,b=2,args=(3,4),kwargs={"mn":1,"mm":2}

参数传递:解包

list = [1,2,3] #解包后:1,2,3
info={"a":1,"b":2} #解包后:a=1,b=2
aa(1,2,*list,**info)
引用
A=4
B=A
id(A)
id(B)
函数传递引用
1.类型
    1.1操作

不可变类型:地址没有改变
    操作使其地址发生改变

可变类型
    a=a+a #地址改变
    a+=a #地址没有改变
函数递归
函数自身调用自身
def a():
    ...
    a()
    ...
匿名函数
aaa = lambda a,b:a+b #a,b为传递的参数,相当于把a+b返回,函数里面不可以有print等

可以当做参数传递

排序字典

info.sort(key=lambda x:x["age"],reverse=True) #根据字典的key字段来进行降序排序
文件

打开

f = open("1.txt",r) #r, w, a

关闭

f.close

读取文件

f.read()
f.read(5) #读五个字节
f.readlines()#按行读取

写文件

f.write("kkkk") #返回成功写进的字节数

文件定位

f.tell() #返回当前位置
f.seek(offset,a) #a=0:文件头,1:当前位置,2:文件末尾,python3对offset为负数不支持了

os

import os

os.rename(“aa”,”bb”) #将”aa”改名为”bb”

os.remove(“aa”) #删除文件

os.getcwd() #获取当前路径

os.chdir(“../”) #修改当前默认路径

os.listdir() #把当前路径的文件名打印出来

os.rmdir(“a/”) #删除文件夹

2017/8/27 周日 又来了一个台风

面向对象

定义

class Cat:
    #属性
    #方法
    def eat(self):
        #...

使用

cat01 = Cat()   
cat01.eat()

添加属性

对象名.新的属性名 = 值

获取属性

1.对象.属性
2.对象的方法里的第一个形参self.属性

初始化方法

__init__(self) #左边两个下划线,右边两个下划线,
相当于构造方法,可接受参数
__init__(self,a,b)

str(self) #相当于Java的tostring方法

for里使用else
for a in list:
    #...
else:
    #如果list里没有任何都系则执行这里

2017/8/28 周一 阴

私有属性: __name #前面两个下划线,不能直接访问,同意通过方法来设置以及返回

私有方法: __method

析构函数:del

销毁对象时调用

继承
单继承
class Father(object): #等价于 class Father:o是小写
    #...

class Son(Father):
    #...
重写方法
与C,Cpp,Java一样,在子类定义一个从父类继承的方法
调用父类被重写的方法
super().method()

2017/8/29 周二 晴

多继承
class A(B,C):
查看调用的先后顺序
print(A.__mro__)
多态
def aa(A a):
类属性
在类里定义num:
class A:
    num=0

访问:
    使用对象访问:若其与实列对象属性的名字相同则会回去实列属性
    cat.num
    使用类名来访问:Cat.num
实例属性
def __init__(self):
    self.age=0
实例方法
def aa(self):
    #....
类方法
@classmethod
def aa(cls,name):

调用:对象.方法名()   类名.方法名()
静态方法
@staticmethod
def AA():

调用:对象.方法名()   类名.方法名()
注意
实例方法与实例属性不能通过类名来调用
单例模式
通过重写方法:def __new__(cls)

2017/8/30 周三 晴

异常
try:
    #...
except: #捕获所有异常
    #...

try:
    #...
except 异常类: #捕获指定的异常
    #...
捕获多个异常
except a1:
except a2:

或者

except a1,a2: #python2

except (a1,a2): #python
打印异常信息
except a1 as result:

except (a1,a2) as result:
else
try:
except:
else:#没有捕获任何异常时执行
finally
try:
except:
else:
finally: #最后一定会执行
异常的传递
抛给调用者
抛出自定义异常
继承Exception类

raise 异常类 #相当于Java 的throw
except 里 raise
把捕获的异常原封不动的抛出
模块
使用import来导入
自定义模块
建立py文件
name
直接运行py:值为:__main__
通过导入模块运行:值为:模块名
from 模块 import 内容
把模块的指定内容导入进来

from random import 函数1,函数2 

把模块的所有内容导入 from random import *
定位模块
import sys
sys.path.insert(0,"文件夹")    
all
是一个列表,代表了 from 模块 import * 所导入的内容
在文件夹里建:__init__.py文件
传参数
import sys
sys.argv #接收参数,列表来存储
列表推导式
a = [x for x in range(1,101)] #生成了有1~10数字的一个列表

a = [x for in range(1,100) id x%2==0] #生成偶数

a = [(x,y) for x in range(1,4) for y in range(1,3)] #[(1,1),(1,2),(2,1),(2,2),(3,1),(3,2)]
set
不可以有相同的元素

a = [11,22,33,44,33,22,11]
b = set(a) #b=(11,22,33,44)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值