Python学习笔记

0.下载安装

下载地址:Download Python | Python.org

PyCharm:Download PyCharm: The Python IDE for data science and web development by JetBrains

1.基础

1.1 交互式环境中输入表达式

1.2 数据类型

  • 整数型
  • 浮点型
  • 字符型
  • 布尔型

数字之间的运算符:

字符串拼接 用 +

joinValue = "hello" + "world"

字符串复制 用 *

doubleValue = "test" * 8

字符串和数字不能直接相连,比如这种是不允许的:

"test" + 5

字符与数字之间互相转换需要使用 str()、int()、float()函数

if __name__ == '__main__': 
    age = 34 
    ageDesc = str(age) 
    ageInt = float(ageDesc) 
    print(age) 
    print(ageDesc) 
    print(ageInt)

1.3 变量 & 赋值

变量名只能使用:数字、字符 、下划线

声明变量时无需声明类型

赋值使用 =

1.4 print() 、input() 输出 、 输入

input()接收的是字符串

1.5 demo

if __name__ == '__main__': 
    # 年龄23 age = 34 
    ageDesc = str(age) 
    ageInt = float(ageDesc) 
    print(age) 
    print(ageDesc) 
    print(ageInt) 
    print(ageInt == age)

2.控制流

2.1比较运算符

  • ==
  • !=
  • <
  • >
  • <=
  • >=

与、或、非: and 、 or、not

if age == 18 and name == 'ming':
    print('young') 
if not age == 18 or name == 'xiao': 
    print('old')

2.2 if语句

if __name__ == '__main__': 
    # 简单if判断 
    if 5 >= 3: 
    print("True") 
    
    # 完整if else 判断 
    score = 80 
    if score >= 80: 
        print("good") 
    elif score >= 60: 
        print("normal") 
    else: print("bad")

2.3while语句

if __name__ == '__main__': 
    # while判断 
    num = 0 
    name = 'ming' 
    while num < 100: 
        num = num + 1 
        if num % 5 == 0: 
            continue 
        if num == 88 and name == 'ming': 
            break print(num)

2.4 for语句

if __name__ == '__main__': 
    # for循环:默认从0开始,不包含10 
    for i in range(10): 
        print(i) 
    
    # for循环:限定从3开始 
    for i in range(3, 10): 
        print(i) 
    
    # for循环:从1开始,步长为2 
    for i in range(1, 10, 2): 
        if i % 5 == 0: continue print(i)

2.5 import的两种写法:

直接import,调用时需要声明模块

import random 

if __name__ == '__main__': 
    rand = random.randint(1, 10) 
    print(rand)

调用时无需声明模块

from random import * 

if __name__ == '__main__': 
    rand = randint(1, 10) 
    print(rand)

3.函数

3.1 如何定义函数

使用def关键字

# 无入参、无出参
def say_hello():
    print("hello")


# 有入参、无出参
def say_hello2(name):
    print("hello, " + name)


# 有入参、有出参
def add(num1, num2):
    return num1 + num2


# 出参为空
def add2(num1, num2):
    return None


if __name__ == '__main__':
    say_hello()
    say_hello2("test")
    print(add(1, 2))
    print(add2(1, 2))

函数关键字

先看下print()函数,预留了sep和end两个关键字,作为拼接符和行尾符

if __name__ == '__main__': 
    print('test', 'test1', sep=',', end=' (end)')

输出:

 3.2 全局变量和局部变量

局部方法中可以使用全局变量,但一定要用global关键字修饰,否则会被认为是局部变量

name = 'global name' 



def test_global():
    global name
    name = 'inner name'
    print(name)


if __name__ == '__main__':
    print(name)
    test_global()
    print(name)

3.3 异常捕获

try ... except ..

def division(num1, num2):
    try:
        return num1 / num2
    except ZeroDivisionError:
        print("error occur")
        return None


if __name__ == '__main__':
    print(division(10, 2))
    print(division(10, 5))

    print(division(10, 0))
    print(division(10, 1))

4.列表

4.1 列表

列表是一组数据的集合,结构为:[]

看下列表基本的操作:

1.定义列表 & 打印

if __name__ == '__main__':
    # 定义一个list
    myList = ['apple', 'banana', 'pear']

    # 打印输出
    print(myList)

    # 遍历打印
    for i in myList:
        print(i)

2.增删改查

if __name__ == '__main__':
    # 定义一个list
    myList = ['apple', 'banana', 'pear']
    
    # 获取长度
    length = len(myList)
    print(length)

    # 获取其中一个元素
    print(myList[2])
    print(myList[-1])

    # 查找其中一个元素位置
    # apple不存在时会报错
    index = myList.index('apple')
    print(index)

    # 增加一个元素
    myList.append('orange')

    # 增加一个元素 指定位置
    myList.insert(0, 'peach')

    # 修改一个元素
    myList[1] = myList[0]
    myList[0] = 'apple'
    print(myList)

    # 删除一个元素 通过索引
    del myList[0]
    print(myList)

    # 删除一个元素 通过值
    # peach不存在时会报错
    myList.remove('peach')
    print(myList)

3.列表的拼接与复制

if __name__ == '__main__':
    # 定义一个list
    myList = ['apple', 'banana', 'pear']

    # 拼接list
    myList = myList + myList
    print(myList)

    # 复制list
    myList = myList * 2
    print(myList)

4.列表的切片(子列表)

if __name__ == '__main__':
    # 定义一个list
    myList = ['apple', 'banana', 'pear']
    subList = myList[2:4]
    print(subList)

4.2元组

元组也是一组集合,但它的元素不可以更改,结构为: ()

看个Demo

if __name__ == '__main__':
    myTuple = ('apple', 'banana', 'pear')
    print(myTuple[0])
    print(myTuple)

4.3 列表和元组转换

通过list()和tuple()函数可以进行转换

if __name__ == '__main__':
    myTuple = tuple(['apple', 'banana', 'pear', 'orange'])
    myList = list(myTuple)
    print(myTuple)

5 字典

5.1 定义

使用{}定义一个字典项

if __name__ == '__main__':
    myMap = {
        'name': 'xiang',
        'age': 23,
        'job': 'software engineer'
    }
    print(myMap)

5.2 获取和赋值

普通赋值获取

但获取dict[key] 时若该键值不存在会报错

if __name__ == '__main__':
    myMap = {
        'name': 'xiang',
        'age': 23,
        'job': 'software engineer'
    }

    myMap['salary'] = 20000
    print(myMap['salary'])

获取:dict.get(key, defaultValue) 当key不存在时不报错,并返回一个默认值 .(同Java中Map.getOrDefault(key, defaultValue))

if __name__ == '__main__':
    myMap = {
        'name': 'xiang',
        'age': 23,
        'job': 'software engineer'
    }
    salary = myMap.get('salary', 20000)
    print('salary: ' + str(salary))

赋值:dict.setdefault(key, value)当key不存在时才赋值. Java map.setIfAbsent(key, value)

if __name__ == '__main__':
    myMap = {
        'name': 'xiang',
        'age': 23,
        'job': 'software engineer'
    }
    myMap.setdefault('salary', 30000)
    print(myMap)

5.3 keys(), values(), items()

获取键列表、值列表、元素列表

if __name__ == '__main__':
    myMap = {
        'name': 'xiang',
        'age': 23,
        'job': 'software engineer'
    }

    # 获取键列表
    myKeys = myMap.keys()
    print("keys: ")
    print(myKeys)

    # 获取值列表
    values = myMap.values()
    print("values: ")
    print(values)

    # 获取元素列表
    items = myMap.items()
    print('items: ')
    print(items)
    for k, v in items:
        print(str(k) + '->' + str(v))

6 字符串常用方法

6.1 普通定义

if __name__ == '__main__':
    str1 = 'hello'
    print(str1)

    # 双引号
    str2 = "hello"
    print(str2)

6.2 转义符

if __name__ == '__main__':
    # 转义符
    str3 = "this is Joe's Dog"
    str4 = "this is Joe\"s Dog"
    print(str3)
    print(str4)

6.3 三重引号

if __name__ == '__main__':
    # 三重引号
    '''
     听说这个适合做注释
    '''
    str5 = '''
        三重引号里我想输入啥就输入啥:
        前提是不能再输给三重引号
        苏打粉''、s、' \s \str5
    '''
    print(str5)

6.4 字符串下标和切片

if __name__ == '__main__':
    # 字符串下标和切片
    str6 = 'Hello world'
    str7 = str6[0:5]
    print(str7)

6.5 in 和 not in

if __name__ == '__main__':
    str8 = 'hello world'
    judge = 'hello' in str8
    print(judge)
    
    judge = 'Hello' not in str8
    print(judge)

6.6 大小写转换

if __name__ == '__main__':
    #  upper() lower() isupper() islower()
    str9 = 'hello world'
    str10 = str9.upper()
    print(str10)
    print(str10.isupper())

6.7 常用的几个isX方法

if __name__ == '__main__':
    str11 = 'abc'
    str12 = '123'
    print(str11.isalpha())
    print(str11.isspace())
    print(str12.isdigit())
    print(str12.isnumeric())

6.8 是否以某个字段开始、结束

 if __name__ == '__main__':
    # startWith() endWith()
    str13 = 'hello world'
    print(str13.startswith('hello'))
    print(str13.endswith('world'))

6.9 拼接和分割

if __name__ == '__main__':
   # join() split()
    str14 = ','.join(['a', 'b', 'c'])
    print(str14)
    myList = str14.split(',')
    print(myList)

6.10 字符串调整

if __name__ == '__main__':
    # rjust()、ljust() center()
    str15 = 'hello'
    str16 = str15.ljust(15, '*')
    str17 = str15.rjust(15, '*')
    str18 = str15.center(15, '*')
    print(str16)
    print(str17)
    print(str18)

6.11 移除空白字符

if __name__ == '__main__':
    # strip() lstrip() rstrip()
    str19 = '  hello   '
    str20 = str19.lstrip()
    str21 = str19.rstrip()
    str22 = str19.strip()
    print(str20)
    print(str21)
    print(str22)

6.12 同剪切板交互

要先安装第三方模块:确保pip工具已安装,则可直接通过pip工具安装

进入pip目录

/Library/Frameworks/Python.framework/Versions/3.9/bin

输入命令等待安装即可:

pip install module

安装成功:

安装第三方模块成功后,即可引用啦

import pyperclip
if __name__ == '__main__':
    # pyperclip() 复制粘贴至系统剪切板
    pyperclip.copy("myName is Joe")
    name = pyperclip.paste()
    print(name)

7.正则表达式

7.1 创建正则表达式

import re

if __name__ == '__main__':
    # 创建regex
    regex = re.compile(r'\d')
    # 查询匹配  search返回第一条匹配的结果
    match = regex.search("23 jsa")
    # 打印结果
    print(match.group())

7.2 使用小括号()分组

import re if __name__ == '__main__': 
    regex2 = re.compile(r'(\d\d\d)-(\d\d\d\d)') 
    match2 = regex2.search('333-4444- 333-6666') 
    print(match2.group(0))

7.3 使用管道符|匹配多个分组

import re if __name__ == '__main__': 
    # 使用管道符|匹配多个分组 
    regex3 = re.compile(r'Man|Woman') 
    match3 = regex3.search('Wo are Man') 
    print(match3.group())

7.4 使用问号? 匹配零次或一次

import re if __name__ == '__main__': 
    # 使用 ? 表示可选匹配 零次或一次 
    regex4 = re.compile(r'bat(wo)?man') 
    match4 = regex4.search('who is batwoman') 
    print(match4.group())

7.5 使用星号* 匹配零次或多次

import re if __name__ == '__main__': 
    regex5 = re.compile(r'\d*') 
    match5 = regex5.search('245251 sdf ') 
    print(match5.group())

7.6 使用加号 + 匹配一次或多次

import re if __name__ == '__main__': 
    # 使用 + 号匹配一次或多次 
    regex6 = re.compile(r'\w+') 
    match6 = regex6.search('sfa 24') 
    print(match6.group())

7.7 使用大括号{}匹配限定次数

import re if __name__ == '__main__': 
    # 使用{} 匹配限定次数 
    regex7 = re.compile(r'\w{5}') 
    match7 = regex7.search('software soft 24') 
    print(match7.group()) 
    regex8 = re.compile(r'\w{5,8}') 
    match8 = regex8.search('software soft 24') 
    print(match8.group())

7.8 贪心匹配和非贪心匹配

默认是贪心匹配,添加?表示非贪心匹配

import re
if __name__ == '__main__':
    regex9 = re.compile(r'\w{5,8}?')
    match9 = regex9.search('software soft 24')
    print(match9.group())

7.9 findall方法

findall返回一个列表,包含所有被匹配的项

import re
if __name__ == '__main__':
    # findall方法
    regex10 = re.compile(r'\w{5,8}')
    list10 = regex10.findall('software television 24')
    print(list10)

7.10 字符分类

  • \d 数字
  • \w 字符
  • \s 空格
  • \D 非数字
  • \W 非字符
  • \S 非空格
import re
if __name__ == '__main__':
    # 字符分类
    regex11 = re.compile(r'\d\w\s\D\W\S')
    match11 = regex11.search('4l w 2')
    print(match11.group())

7.11 使用[]建立自己的字符分类

import re
if __name__ == '__main__':
    # 建立自己的字符分类
    regex12 = re.compile(r'[0-9a-zA-Z]*')
    match12 = regex12.search('test2353765dt ,kji')
    print(match12.group())

7.12 插入字符^ 和 美元字符$ 限定起始字符和中止字符

import re
if __name__ == '__main__':
    # 插入字符和美元字符
    regex13 = re.compile(r'^a\w*')
    match13 = regex13.search('adt ,kji')
    print(match13.group())
    
    regex14 = re.compile(r'\w*i$')
    match14 = regex14.search('adt ,kji')
    print(match14.group())

7.13 通配字符.

import re
if __name__ == '__main__':
    # 通配字符.
    regex15 = re.compile(r'.{5}')
    match15 = regex15.search('test2353   [][')
    print(match15.group())
    
    # 用.* 匹配所有字符
    regex16 = re.compile(r'.*')
    match16 = regex16.search('test2353   [][')
    print(match16.group())
    
    # 用.匹配换行
    regex17 = re.compile(r'.*', re.DOTALL)
    match17 = regex17.search('test2353   [][\n te')
    print(match17.group())

7.14 不区分大小写的匹配

import re
if __name__ == '__main__':
    regex18 = re.compile(r'test', re.IGNORECASE)
    match18 = regex18.search('TEST   []')
    print(match18.group())

7.15 使用sub()方法替换匹配的字符

import re
if __name__ == '__main__':
    # 使用sub()方法替换匹配的字符串
    regex19 = re.compile(r'test', re.IGNORECASE)
    replace = regex19.sub('replace', 'TEST   soft')
    print(replace)

8 文件操作

8.1 当前工作路径

import os

if __name__ == '__main__':
    # 当前路径
    # /Users/xiang/software/workspaceForOthers/pythonProject/advanced
    cwd = os.getcwd()
    print(cwd)

    # 更换当前工作目录
    os.chdir('/Users/xiang/software/workspaceForOthers')
    cwd = os.getcwd()
    print(cwd)

    # 根据操作系统拼接路径
    myPath = os.path.join('Users', 'xiang', 'software')
    print(myPath)

8.2 目录操作

import os

if __name__ == '__main__':
    # 创建目录
    existFlag = os.path.exists('/Users/xiang/software/workspaceForOthers/addDir')
    if not existFlag:
        os.makedirs('/Users/xiang/software/workspaceForOthers/addDir')

    # 移除目录
    existFlag = os.path.exists('/Users/xiang/software/workspaceForOthers/addDir')
    if existFlag:
        os.removedirs('/Users/xiang/software/workspaceForOthers/addDir')

8.3 获取绝对路径和相对路径

import os

if __name__ == '__main__':
    # 获取绝对路径
    absPath = os.path.abspath('..')
    print(absPath)

    # 获取相对路径
    relPath = os.path.relpath('/Users/xiang/software/workspaceForOthers/addDir/addDir2')
    print(relPath)

8.4 文件相关方法

import os

if __name__ == '__main__':
    # 路径拆分成目录和文件名
    cwdPath = '/Users/xiang/software/workspaceForOthers'
    dirName = os.path.dirname(cwdPath)
    baseName = os.path.basename(cwdPath)
    print('dirName: ' + dirName)
    print('baseName:' + baseName)

    splitList = os.path.split(cwdPath)
    print('dirName: ' + dirName)
    print('baseName:' + baseName)    # 查看文件大小

    # 查看文件夹内容
    cwdPath = '/Users/xiang/software/workspaceForOthers'
    dirList = os.listdir(cwdPath)
    print('文件夹内容:' + str(dirList))

    size = os.path.getsize(cwdPath)
    print('文件大小:' + str(size))

    # 校验是否是文件或文件夹
    cwdPath = '/Users/xiang/software/workspaceForOthers'
    isDir = os.path.isdir(cwdPath)
    isFile = os.path.isfile(cwdPath)
    print('是目录吗:' + str(isDir))
    print('是文件吗:' + str(isFile))

8.5 文件读写

import os if __name__ == '__main__': 
    # 文件读 cwdFilePath = '/Users/xiang/software/workspaceForOthers/hello.c'
    cwdFile = open(cwdFilePath) 
    fileContext = cwdFile.read() 
    print(fileContext)
    cwdFile.close() 
    cwdFile2 = open(cwdFilePath) 
    fileLinesList = cwdFile2.readlines() 
    for line in fileLinesList: 
        print(line) cwdFile2.close() 

    # 文件写 writeFilePath = '/Users/xiang/software/workspaceForOthers/test.txt'
    writeFile = open(writeFilePath, 'w') writeFile.write('this is test')
    cwdFile.close() # 文件追加 writeFilePath = '/Users/xiang/software/workspaceForOthers/test.txt' 
    writeFile = open(writeFilePath, 'a') 
    writeFile.write('\nthis is test append') 
    cwdFile.close()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值