python 重点基础知识

python3

---------------------------------------------------------------------------------------------------------------------------------

进制表示

二进制        0b100         bin()

八进制        0o4            oct()

十进制        4                int()    

十六进制     0x4            hex()


---------------------------------------------------------------------------------------------------------------------------------

表示字符串有 单引号、双引号、三引号

特殊点:

1、双引号在字符串最外围时,单引号在里面作为字符出现

2、三引号在IDLE中可以回车多行输出



---------------------------------------------------------------------------------------------------------------------------------

原始字符串



---------------------------------------------------------------------------------------------------------------------------------

字符串切割



---------------------------------------------------------------------------------------------------------------------------------


列表         type([1])      ———》    list

嵌套列表

元组(不可变)        type((1))      ———》   int 

            type((1,))      ———》 tuple




str    list    tuple 

序列

'hello world'[2]        'l'

[1,2,3,4][2]                '3' 

(1,2,3,4)[2]               '3'

"0123456789"[0:8:2]        '0246'

3 in [1,2,3,4,5,6,7,8]       True

3 not in [1,2,3,4,5]        False

len([1,2,3,4,5,6])       6

len("hello world")   11    

max([1,2,3,4,5,6,8])   8

max(['hello world'])   w

ord('w')     119      表示ascII码值


---------------------------------------------------------------------------------------------------------------------------------

集合 set  

1、无序

2、不重复

len({1,2,3})    3

1 in {1,2,3}   True

{1,2,3,4,5,6}-{3,4,9}       {1,2,5,6}     差集

{1,2,3,4,5,6}&{3,4,9}      {3,4}    交集

{1,2,3,4,5,6} | {3,4,9}      {1,2,3,4,5,6,9} 合集或者并集

 type({})        <class 'dict'>

type(set())    <class 'set'>


---------------------------------------------------------------------------------------------------------------------------------

字典

无序

{key1:value1,key2:value2....}

type({1:1,2:2,3:3})        dict

value :str、int、float、list、set、dict

key:(不可变)  不能是list、set

type({})   dict


---------------------------------------------------------------------------------------------------------------------------------

    


int、str、tuple   值类型 (不可变)


list、set、dict   引用类型 (可变)


---------------------------------------------------------------------------------------------------------------------------------

python项目的组织结构

包   

模块

函数、变量


---------------------------------------------------------------------------------------------------------------------------------

导入

1、模块(import)(单单import只能导入模块,形式说明而已)   (本模块和testPackage是同一级别的目录)

import testPackage.mode1 as b

print(b.a) #print(testPackage.mode1.a)

(导入testPackage包里的模块mode1,并命名别名为b)

2、变量 (from导入模块,import导入变量)(本模块和testPackage是同一级别的目录)

(用from导入只能用一下六种方式)(from 可以导入包里的模块、模块里的变量)

方式1、from testPackage.mode1 import (variable1,variable2,variable3)   (最好不要用反斜杆换行,可以用括号括住)

方式2、from testPackage.mode1 import variable1,variable2,variable3

方式3、from testPackage.mode1 import *

print(variable1)   可以直接打出 (这里就不能使用print(mpde1.variable),会报错

导入testPackage包里的模块mode1里所有变量

(或者是方式4  from testPackage import mode1 as variable1)(输出: print(variable1.variable1)  一样是没问题的 )

(说明以上一行:若当import一个模块后加命名,只能用命名后的名称)

方式5 from testPackage import mode1

方式6 from testPackage import *

---------------------------------------------------------------------------------------------------------------------------------单独导入一个包

import bao

本模块和包bao是用一级目录

(只会运行包里的__init__.py文件,包里的其他的模块使用不了)

---------------------------------------------------------------------------------------------------------------------------------

在需要导入模块(或者包的__init__.py 文件里)里编写 __all__=["变量1","变量2"],

则在from testPackage.mode1 import *后只能使用mode1里的变量1和变量2


---------------------------------------------------------------------------------------------------------------------------------

再倒入某个包里某个模块等,都是先运行包里的__init__.py文件

如果包里的__init__.py文件里的编写:__all__=["模块1","模块2"]

则使能使用 from testPackage import * ,是只会运行__init__.py、模块1、模块2,也是说不能引用包里的模块3和其他(模块4。。。)



    

------------------------------------------------------------------------------------------------------

参数:

1、必须参数

2、关键字参数

3、默认参数

4、可变参数



可变参数

def class2(*param):
    print("参数:",param)
    print("类型",type(param))

print("class(1,2,3): ",class2(1,2,3))

print("class([1,2,3]): ",class2([1,2,3]))

print("class((1,2,3)): ",class2((1,2,3)))

print("clase({1,2,3}): ",class2({1,2,3}))


print("class(*(1,2,3)): ",class2(*(1,2,3)))

print("class(*[1,2,3]): ",class2(*[1,2,3]))

print("class(*{1,2,3}): ",class2(*{1,2,3}))
输出如下

参数: (1, 2, 3)
类型 <class 'tuple'>
class(1,2,3):  None
参数: ([1, 2, 3],)
类型 <class 'tuple'>
class([1,2,3]):  None
参数: ((1, 2, 3),)
类型 <class 'tuple'>
class((1,2,3)):  None
参数: ({1, 2, 3},)
类型 <class 'tuple'>
clase({1,2,3}):  None
参数: (1, 2, 3)
类型 <class 'tuple'>
class(*(1,2,3)):  None
参数: (1, 2, 3)
类型 <class 'tuple'>
class(*[1,2,3]):  None
参数: (1, 2, 3)
类型 <class 'tuple'>

class(*{1,2,3}):  None

---------------------------------------------------------------------------------------------------------------------

关键字参数

def city_temp(**param):
    print(param)
    print(type(param))

city_temp(bj='32c',xm='23c',sh='31c')
输出:
{'bj': '32c', 'xm': '23c', 'sh': '31c'}

<class 'dict'>

---------------------------------------------------------------------------------------------------

def city_temp(**param):
    for key,value in param.items():
        print(key,':',value)
a = {'bj':'32c','sh':'31c'}
city_temp(**a)

输出:

bj : 32c

sh : 31c


---------------------------------------------------------------------------------------------------------------------------------

python里面没有块级作用域的概念

即for循环外面可以使用里面的变量

# c = 10 #全局变量
def demo():
    c = 50 #局部变量
    for i in range(0,9):
        a = 'a'
        c +=1
    print(c)
    print(a)
#print(c)
demo()、

依然可以打印出a的值

---------------------------------------------------------------------------------------------------------------------------------

将函数里的变量定义成全局变量(模块变量)(即可在别的模块里引用(import进去就行了))

def demo():
    global c
    c = 1
demo()
print(c)
---------------------------------------------------------------------------------------------------------------------------------

类:

访问实例变量需要加self关键字

---------------------------------------------------------------------------------------------------------------------------------

在实例方法中访问类变量sum

__class__.sum  

或者在类方法中调用 如下

---------------------------------------------------------------------------------------------------------------------------------

类方法


方法前夹@classmethid关键字】

class Student():
    @classmethod
    def plus_sum(cls):
        cls.sum +=1
        print(cls.sum)

使用该法方法最好直接用Student.plus_sum()才能更好说明使用类方法

但也可以student1 =Student()    student1.plus_sum()

python不会报错

--------------------------------------------------------------------------------------------------------------------------------

静态方法

调加装饰器@staticmethod

class Student():
    @staticmethod
    def add(x,y):
        print('This is a static method')

student1 = Student()
student1.add(1,2)
Student.add(2,3)

对象可以使用静态方法

类也可以使用静态方法

静态方法也可以访问类变量:静态方法里面直接print(Student.name)  

静态方法不能访问实例变量

能使用静态方法的地方可以使用类方法替代

建议少用静态方法,因为静态方法和面对对象关联比较弱。

class Student():
sum = 0
@staticmethod
def getClassName():
print(Student.sum)
print( type(Student.getClassName()))

放回类型是Nonetype


---------------------------------------------------------------------------------------------------------------------------------

成员可见性:公开和私有

将类里面的实例方法、实例变量、类方法、类变量、、、、、变成私有的,在其前面加双下滑线。

若在其前面加双下划线且在后面也加双下划线,则其为公开,非私有


__score是私有变量

输出实例里面的变量 print(student1.__dict__)

会看到私有变量的名字被改成了 __Student__score     


但是如果

student1.__socre = -1

print(student1.__socre) 

python不会报错

原因是这里 对象student1,新增了一个公开变量__socre(在查看该实例里有什么变量(即用student1.__dict__查看),可看到)


严格意义上,python里面是没有私有变量的!你明白的。想要访问私有变量,在外面一样是可以访问的

---------------------------------------------------------------------------------------------------------------------------------

类的单继承

mode1.py里面

class Human():
    sum = 0
    def __init__(self,name,age):
        self.name = name
        self.age = age
        self.__score = 0
        self.__class__.sum +=1
    def get_name(self):
        print(self.name)
    def meiziya(self):
        print('this is Human  meiziya')

mode2.py里面

from mode1 import Human
class Student(Human):
    def __init__(self,school,name,age):
        self.school = school
        Human.__init__(self,name,age)   ###重点
    def do_homework(self):
        print('english homework')
    def meiziya(self):
        Human.meiziya(self)
        print('this is Student meiziya ')
student1 = Student('路边小学','小明',18)
print(student1.sum)
print(Student.sum)
print(student1.name)
print(student1.age)
student1.get_name()
student1.meiziya()
输出:

1
1
小明
18
小明
this is Human  meiziya

this is Student meiziya

函数重载——》先运行最里面的类的函数,再逐步往外



super关键字

在上上面的mode2里的Student里面调用父类的构造函数可这样用

super(Student,self).__init__(name,age)  即可

调用父类的实例方法一样是可以用super关键字

super(Student,self).meiziya()   即可

            super(Student, self).__init__(name,age) ###重点 建议写这个
            #Human.__init__(self,name,age)         上下部分等价


           super(Student, self).meiziya() ###重点 建议写这个
     #Human.meiziya(self)                             上下部分等价

则在修改要继承的类时,只需在子类括号里修改,其余地方不需要

---------------------------------------------------------------------------------------------------------------------------------

正则表达式:

import re


 取反  (中间字符不为c、f、d)  r = re.findall('a[^cfd]c',s)

# 数字   \d    \D

#单词    \w    \W

#空白字符    \s    \S

#匹配0次或者无限次    *

#匹配1次或者无限次    +

#匹配0次或者1次    ?

非贪婪:

r = re.findall('[a-z]{3,6}?',a)

最多匹配三个单词的字符


#边界匹配

r = re.findall('^\d{4,8}$',qq)


#组 

一个括号就是一组,括号后面接{3},表重复该str三次


sub()函数  (替代)

r = re.sub('C#','GO',lanuage,1)    

第一个参数是要搜索的str,第二个参数要替换的str,第三个参数,操作的str,第四个参数是要替换的次数,默认为0全部

第二个参数可以为函数

import re
lanuage = 'PythonC#JavaC#PHPC#'

def covert(value):
    print(value.group())
    print(type(value.group()))
    match = value.group()
    return '!!' + match + '!!'

r = re.sub('C#',covert,lanuage)
print(r)


re.match()   只能从字符串的首位开始匹配,只匹配一次,也就是只返回一次

re.search()   开始位无限制,也只匹配一次,

re.findall()   开始位无限制,匹配所有

match()函数
s = '8d83c773dDGS'

r = re.match('\d',s)
print(r)                          #如果无法匹配到在位None,None.span()和None.group()都是会报错的
print(r.span())
print(r.group())
r1 = re.search('\d',s)
print(r1.group())

输出

<_sre.SRE_Match object; span=(0, 1), match='8'>
(0, 1)
8

8



re.search()函数

import re

s = 'life is short,i use python, i love python'

r = re.search('life(.*)python(.*)python',s)
print(r.group(0))
print(r.group(1))
print(r.group(2))




---------------------------------------------------------------------------------------------------------------------------------

JSON

一种轻量级的数据交换格式


Json  object-> dict

import json

json_str = '{"name":"zhimin","age":18}'   #JSON object      (array)
student = json.loads(json_str)
print(type(student))
print(student)
输出:
<class 'dict'>
{'name': 'zhimin', 'age': 18}     

Json 数组array -> list(反序列化)

import json

json_str = '[{"name":"zhimin","age":18},{"name":"zhimin","age":18}]'
student = json.loads(json_str)
print(type(student))
print(student)

输出:(反序列化)

<class 'list'>

[{'name': 'zhimin', 'age': 18}, {'name': 'zhimin', 'age': 18}]


格式对应表

json            python
object          dict
array           list
string          str
number          int
true            True
false           False
null            None


python list -> json array(序列化)

import json

student = [
            {'name':'zhimin','age':18,'flag':False},
            {'name':'zhimin','age':19}
          ]
json_str = json.dumps(student)
print(type(json_str))
print(json_str)

输出:(序列化)

<class 'str'>

[{"name": "zhimin", "age": 18, "flag": false}, {"name": "zhimin", "age": 19}]



JSON对象      python里应该说是没有这个说法

JSON        数据交换的一种格式

JSON字符串

JSON有自己的数据格式,虽然它和Javascript的数据类型有些相似

ECMASCRIPT  ActionScript  JSON  Typescript


REST服务的标准格式:JSON


---------------------------------------------------------------------------------------------------------------------------------

python里面一切都是python类或者对象

---------------------------------------------------------------------------------------------------------------------------------

枚举

from enum import Enum

class VIP(Enum):
    YELLOW = 1
    GREEN = 2
    BLACK = 3
    RED = 4
print(VIP.YELLOW.value)
print(VIP.YELLOW)
print(type(VIP.YELLOW))
print(VIP.YELLOW.name)
print(type(VIP.YELLOW.name))
print(VIP['YELLOW'])
print(type(VIP['YELLOW']))

 

输出:

1VIP.YELLOW<enum 'VIP'>YELLOW<class 'str'>VIP.YELLOW<enum 'VIP'>

(除枚举外表示类型有种形式:1、模块变量;2、字典;3、类)

上面这三种都是可变的,且没有防止相同标签的功能

枚举特点:1、不能改变标签的值;2、防止出现相同标签

遍历枚举的变迁

for v in VIP:

    print(v)

枚举的比较

同一个枚举:

result = VIP.GREEN == VIP.GREEN

print(result)   打印输出:True

result1 = VIP.GREEN is VIP.GREEN

print(result)  打印输出:True

两个枚举:

result = VIP.GEEN == VIP.GREEN  #他们的值是相同的

print(result)  打印输出:False

枚举的注意问题:

两个标签的值都是一样时,则第二个标签位第一个标签的别名,prin(第二个标签) 输出第一个标签的名

枚举的遍历:

from enum import Enum

class VIP(Enum):
    YELLOW = 1
    GREEN = 1
    BLACK = 3
    RED = 4
for v in VIP.__members__.items():
    print(v)
    print(type(v))
('YELLOW', <VIP.YELLOW: 1>)
<class 'tuple'>
('GREEN', <VIP.YELLOW: 1>)
<class 'tuple'>
('BLACK', <VIP.BLACK: 3>)
<class 'tuple'>
('RED', <VIP.RED: 4>)

<class 'tuple'>

对于上面的,如果for v in VIP.__members__:   print(v)    则输出的YELLOW YELLOW BLACK RED


枚举的转换:

a = 1
print(VIP(a))
输出:VIP.YELLOW
 

枚举的总结:

   枚举:23种设计模式中的单例模式,不能像类一样实例化

    强制每个枚举的数值都是int类型,则可以 from enum import IntEnum

    每个枚举的值都是不重复的的可以用 装饰器unique

from enum import IntEnum,unique

@unique
class VIP(IntEnum):
    YELLOW = 1
    GREEN = 2
    BLACK = 3
    RED = 4
---------------------------------------------------------------------------------------------------------------------------------







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值