Python学习笔记之语法

Python学习笔记之语法

文章目录

  • Python学习笔记之语法
    • 基础知识
      • 帮助指令
      • 使用原始字符串
      • 长字符串
      • 使用随机数
      • 类型转换
      • 特殊乘法 幂运算
      • 逻辑运算
      • 条件运算
      • 断言
      • for循环
      • 列表 list
      • 元组 tuple
      • 字符串 str
      • 字符串格式化
      • 序列
    • 函数
    • 字典
      • 两个星号**
      • 集合 set
    • 文件操作
      • OS模块中关于文件/目录常用函数的使用方法
      • os下path模块
      • os.path 模块中关于路径常用函数使用方法
      • pickle 类似于C语言保存和读取一个结构体
    • 异常处理
      • try except
      • try finally
      • else和while、for、try等搭配
      • with语句
    • 类和对象
      • 对象 = 属性 + 方法
      • 继承
      • 多重继承和组合
      • 查看对象的属性
      • 一些相关的BIF
      • 还有很多待研究
    • 模块
      • 模块的使用
      • \__name__ = '\__main__'
      • 查看模块的搜索路径

基础知识

帮助指令

BIF:Build in function
dir(__builtins__)#查看内建函数
help(print)
dir(print)
dir(list) #查看list包含的对象
list.__all__ #只查看可供调用的对象,注意:不是所有模块都有__all__属性
os.path.__file__#__file__查看源代码位置

使用原始字符串

在字符串前面加一个英文字幕r即可
e.g. string = r"C:\now"
注意:无论是否原始字符串,都不能以反斜杠""作为结尾。

长字符串

"""
窗前明月光
疑是地上霜
"""

使用随机数

import ramdom
secret = ramdom.ramdint(1,10)

类型转换

a='520'
b=int(a)
b = float(a)
c = str(5e10) #c = "50000000000"

特殊乘法 幂运算

-2**3 # -2的3次方

逻辑运算

and or not

条件运算

a=100
if 90>80:
    print("xxx")
elif a<90:
    print("yyy")
else:
    print("zzz")

断言

assert

for循环

e.g. 
for i in range(5):  #range 包含0,但是不包含5
    print(xxx)
for i in range(1,10,2)
    print(i)

列表 list

创建列表
    mix = [1,2,"cavin",3,4,5,6,x,[z,v,d],a]
向列表添加元素
    添加一个元素:mix.append("hello")
    添加多个元素:mix.extend("小美",123)
插入元素:
    mix.insert(0,"狗子")  #其中0表示的是列表的位置
从列表中获取元素:
    mix[0] #获取第0个元素
    mix[1],mix[3] = mix[3],mix[1] #元素1和元素3互相调换
删除元素:
    mix.remove("狗子")
删除某个位置的元素:
    del mix[0]
列表分片:
    mix2 = mix[1:3]
    mix2 = mix[:3]
    mix2 = mix[0:9:2]
列表的其他函数,可以通过这个指令查看dir(list)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__',
 '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', 
 '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', 
 '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', 
 '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 
 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

元组 tuple

#带上了枷锁的列表
元组创建时使用小括号(大多数时候)
tuple1=(1,2,"狗子")
元组和列表类似,但是元组创建后不能修改。
dir(tuple)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', 
'__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__',
 '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', 
 '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', 
 '__subclasshook__', 'count', 'index']

字符串 str

dir(str)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', 
'__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__',
 '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__',
  '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__',
   '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 
   'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 
   'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 
   'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace',
    'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 
    'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
capitalize:把字符串的第一个字符改成大写
casefold:把整个字符串的所有字符改成小写
upper:转换字符串中的所有小写字符为大写
rstrip:删除字符串末尾的空格
strip([chars]):删除字符串前边和后边所有的空格

字符串格式化

1.format()
    e.g. "{0} welcom {1} {num}".format("hello","cavin",num = "1000")
    其中{0},{1}是位置参数,{num}是关键字参数,如果位置参数和关键字参数综合使用,位置参数必须在前。
    e.g. "{0}:{1:.2f}".format("圆周率",3.141592)
    冒号表示格式化符号的开始,.2表示四舍五入保留两位小数点。
2.格式化操作符% 
    "%d" % 98  或者 "%d"%98

序列

list([iterable])
tuple([iterable])
str(obj)
len(sub)
max(...)
min(...)
sum()
sorted()

函数

def myfun():
    print(xxx)

def add(num1,num2):
    """
    注释说明:返回num1+num2
    """
    print(num1+num2)
    return num1+num2,hello  #可以同时返回多个值
#获取函数说明 add.__doc__

全局变量:
    函数内部可以像C语言那样去访问全局变量,但是想要修改的话,python会在函数内部自动创建一个同名的局部变量,这样修改就不会影响到全局变量;
    如果实在需要修改全局变量,可以在函数内部用global 声明全局变量
e.g. 
    count = 10
    def test():
        global count
        count = 5
        print(count)

lambda和filter
list(filter(lambda x: x%2 , range(10)))  #取0-9内的奇数
lambda和map
list(map(lambda x: x*2 , range(10)))
递归
def recursion():
    recursion()

字典

创建字典
dict1 = {"张三":"男", "李四":"女"}
dict1 = dict((("张三","男"),("李四","女"))) #将元组转成字典
dict1 = dict("张三"="男", "李四"="女")
dict1["张三"] = "男" #字典赋值或者改写
dict的BIF:
fromkeys()  #dict1.fromkeys()
keys()、values()、items()  ##dict1.keys()
get()
copy()
pop()和popitem()
update()

两个星号**

(**) 两个星号的收集参数表示将参数们打包成字典的形式
e.g. 
def test(** params):
    print("有 %d个参数" % len(params))
    print("它们分别是:",params)
test(a=1,b=2,c=3)
运行结果:
    有3个参数
    它们分别是:{'c'=3,'b'=2,'a'=1}

集合 set

num1 = {}
集合里面没有重复的数据,即集合可以清除重复数据
e.g.
list1 = [1,1,2,3,4,4]
list1 = list(set(list1)) #删除重复数据
不可变集合
num1 = frozen({1,2,3,4,5})

文件操作

首先需要用的OS模块,因为要设计文件名,path之类的操作
import os

OS模块中关于文件/目录常用函数的使用方法

func name 使用方法
os.getcwd() 获取当前工作目录
os.chdir(path) 改变当前工作目录
os.listdir(path=’.’) 列举指定目录中的文件名
os.mkdir(path)
os.makedirs(path)
os.remove(path) 删除文件
os.rmdir(path) 删除单层目录
os.removedirs(path)
os.rename(old,new)
os.system(command) 运行系统的shell命令
walk(top) 遍历top参数指定路径下的所有子目录,并将结果返回一个三元组(路径,[包含目录],[包含文件])
os.curdir()
os.pardir
os.sep 输出操作系统特定的路径分隔符(windows下为’\’,linux下为’/’)
os.linesep 当前平台使用的终止符(windows下为’\r\n’,linux下为’\n’)
os.name 指代当前使用的操作系统

os下path模块

import os
dir(os.path)
['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', 
'__package__', '__spec__', '_get_sep', '_joinrealpath', '_varprog', '_varprogb', 'abspath', 
'altsep', 'basename', 'commonpath', 'commonprefix', 'curdir', 'defpath', 'devnull', 'dirname', 
'exists', 'expanduser', 'expandvars', 'extsep', 'genericpath', 'getatime', 'getctime', 'getmtime',
 'getsize', 'isabs', 'isdir', 'isfile', 'islink', 'ismount', 'join', 'lexists', 'normcase', 
 'normpath', 'os', 'pardir', 'pathsep', 'realpath', 'relpath', 'samefile', 'sameopenfile', 
 'samestat', 'sep', 'split', 'splitdrive', 'splitext', 'stat', 'supports_unicode_filenames', 
 'sys']
 os.path.__all__
['normcase', 'isabs', 'join', 'splitdrive', 'split', 'splitext', 'basename', 'dirname', 
'commonprefix', 'getsize', 'getmtime', 'getatime', 'getctime', 'islink', 'exists', 'lexists', 
'isdir', 'isfile', 'ismount', 'expanduser', 'expandvars', 'normpath', 'abspath', 'samefile', 
'sameopenfile', 'samestat', 'curdir', 'pardir', 'sep', 'pathsep', 'defpath', 'altsep', 'extsep',
 'devnull', 'realpath', 'supports_unicode_filenames', 'relpath', 'commonpath']

os.path 模块中关于路径常用函数使用方法

func name 使用方法
basename(path) 去掉目录路径,返回文件名
dirname(path) 返回路径
join(path1[,path2[,…]]) 路径合成
split(path) 分割文件名和路径,返回(f_path,f_name)元组
splitext(path) 分离文件名和扩展名
‘isabs’, ‘isdir’, ‘isfile’, ‘islink’, ‘ismount’
getsize(file)
‘getatime’, ‘getctime’, ‘getmtime’ 最近访问时间,创建时间,最新修改时间

pickle 类似于C语言保存和读取一个结构体

import pickle
my_list = [123,456,"abc","张三"]
file_pickle = open(r'E:\my_list.pkl','wb')
pickle.dump(my_list,file_pickle)
file_pickle.close()
或者
import pickle
pickle_file = open(r'E:\my_list.pkl','wb')
my_list = pickle.load(pickle_file)
print(my_list)

异常处理

AssertionError
AttributeError
IndexError
KeyError
NameError
OSError
SyntaxError
TypeError
ZeroDivisionError

try except

try:
    检测范围
except Exception[as reason]:
    出现异常[exception]后的处理代码

e.g.
try:
    f = open("test.txt")
    print(f.read())
    f.close
except OSError:
    print('打开文件的时候出错了')
或者
try:
    f = open("test.txt")
    print(f.read())
    f.close
except OSError as reason:
    print('打开文件的时候出错了\n错误原因是' + str(reason))
except TypeError as reason:
    print('打开文件的时候出错了\n错误原因是' + str(reason))
或者
try:
    f = open("test.txt")
    print(f.read())
    f.close
except (OSError,TypeError):
    print('打开文件的时候出错了\n错误原因是' + str(reason))
或者
try:
    ...
except:
    ...

try finally

finally语块中的内容就是确保无论如何都将被执行的内容

e.g.
try:
    f = open("test.txt")
    print(f.read())    
except OSError:
    print('打开文件的时候出错了')
finally:
    f.close

else和while、for、try等搭配

e.g.:
try:
    int('abc')
except ValueError as reason:
    print("Error : " + str(reason))
else:
    print("没有任何异常")

e.g.:
    count = num // 2
    while count > 1:
        if num % count == 0:
            print( '%d的最大约数是%d' % (num,count))
            break;
        count -= 1
    else:
        print('%d是素数!'%num)

with语句

e.g.
try:
    f = open("test.txt")
    print(f.read())    
except OSError:
    print('打开文件的时候出错了')
finally:
    f.close
可替换为
e.g.
try:
    with open("test.txt") as f
    print(f.read())    
except OSError:
    print('打开文件的时候出错了')

类和对象

对象 = 属性 + 方法

class School:
    #python约定类名以大写字母开头
    #属性从代码层面来看其实就是变量
    addr = '成都武侯区'
    name = '某某中学'

    #在变量前面增加__,此变量则为私有变量
    __students = 1000

    #init会在对象被创建时自动调用
    def __init__(self,newname)
        self.name = newname

    #方法实际就是函数
    def get_students(self):  #self相当于this指针
        return self.__students

def main():
    sch = School('大源中学')
    stu_count = sch.get_students()

继承

class Parent:
    def __init__(self):
        a = 10
    def fun1(self):
        print('parent is running')

class Child(Parent):
    def __init__(self):
        super().__init__() 或者 Parent.__init__(self) #super可以自动找出所有的基类,所以推荐super
        b = 80
    ...

def main():
    c = Child()
    c.fun1()

多重继承和组合

class Base1():
    def fun1():
        print(xxx)
class Base1():
    def fun2():
        print(xxx) 
#多重继承
class C(Base1,Base2):
    def fun3():
        print(xxx)       
#组合
class C():
    def __init__(self):
        self.bs1 = Base1()
        self.bs2 = Base2()

查看对象的属性

CC.__dict__

一些相关的BIF

issubclass(class,classinfo) 判断class是否是classinfo的子类
isinstance(object,classinfo)判断object是否是classinfo的实例对象
hasattr(object,name)
getattr(object,name[,default])
setattr(object,name,value)
delattr(object,name)
property(fget=None,fset=None,fdel=None,doc=None)

### 构造和析构

__init__(self[,...]) #返回值只能是None
__del__(self) 

还有很多待研究


模块

模块就是程序,OS就是一个模块

模块的使用

import 模块名
from 模块名 import 函数名
import 模块名 as 新名字

_name_ = ‘_main_’

def test():
    print(xxx)
if __name__ == '__main__'
    test()

查看模块的搜索路径

import sys
sys.path
#把模块所在位置添加到搜索路径
sys.path.append(path)

包就是把模块分门别类地存放到不同的文件,然后把各个文件夹的位置告诉python

包的创建步骤
1.创建一个文件夹,用于存放相关的模块,文件夹的名字即包的名字;
2.在文件夹中创建一个__init__.py的模块文件,内容可以为空;
3.将相关模块放入文件夹中

你可能感兴趣的:(python)