python学习笔记(一)--基础部分

这篇博客详细介绍了Python的基础知识,包括基本操作如字符串、输入输出、运算符和逻辑操作符,以及数据结构如列表、元组、字典和集合。深入讨论了函数的使用,如参数类型、匿名函数和模块导入。还涵盖了文件操作、异常处理、面向对象编程的基础概念,以及进程休眠和正则表达式等主题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


下篇高级部分: https://blog.youkuaiyun.com/wang342626/article/details/89005048


python的中文API: https://docs.python.org/zh-cn/3/
其他中文API: python3-cookbook

基本操作

字符串

str = '123'
str = "123"
str = """123"""
n = len(str)

字符串的格式化

"大家好,我叫{0},我{1}岁了".format('张三',23)
"大家好,我叫{name},我{age}岁了".format(name='张三',age=23)

# 像C语言的格式化方法
print("%d的阶乘是:%d" % (n,x) )

字符串的更多函数:
https://fishc.com.cn/forum.php?mod=viewthread&tid=38992&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403

输入输出

x = input("请输入一个数字")
x=int(x)
if(x==8):
    print("对了")
else:
    print("错误")

强制转换

a = int(x)
str(x)
float(x)
# 没有double(x)
# 类型
type(x) 
# 是不是这个类型,返回true false
isinstance(x,int)

基本运算

5/2  是2.5
5//2 是2
3**2  是平方
9**0.5 是根号

逻辑操作符

and 不能用&&
or
not
# 断言
assert 3>4
# false即可中断程序,用于调试

if 和 while 和 for

if x>4:
    print("大于4")

if(x>5):
    print("大于5")
elif x<10:
    print("小于10")
for num in range(5):
    print(num) #默认输出一个数和一个回车
    
for num in range(5,10):
    print(num,end=' ') #输出一个数和一个空格

内置函数

int() 
float()
help()

input()  # 输入数值
raw_input()  # 输入字符串

bin()  # 转为二进制
oct() # 转为八进制
hex()  #转为十六进制

ord('a')  #返回a的ASCII码,是97
chr(65) #返回65对应的字母
import math
dir(math)  # 查看math模块的函数
help(math.sqrt()) # 查看sqrt函数用法

数据结构

列表

python没有数组

list=['wang',23,'男',"电脑"]
print(list)

for item in list:
    print(item)
# 追加一个元素
list.append('学习')

# 追加另一个列表
list2=['C语言','java','python'];
list.extend(list2)

# 插入,下标从0开始
list.insert(0,'哈哈')
n = len(list) #长度
item = list[0] #获取第0个

#删除元素
list.remove('wang') 
# 删除第0个
list.pop(2)
del list[0]
del list  #清空列表
# 删除最后一个
list.pop()
# 切片,截取1到3位置的元素
list2 = list[1:3]
list2 = list[:3]  #截取0到3位置的元素
list2=list[:] #截取全部的元素,列表复制
list2=list #这只是地址复制,改变list,list2也会改变的
# 列表比较大小,先比较第0位置的元素,再继续比较剩下的
list1>list2
# 列表+列表
list3 = list+list2
# 列表复制3次
list3 = list*3

列表内置函数

list.count('wang') #计数'wang'出现几次
list.index('wang') #找到第一次出现'wang'的下标
list.clear() # 清空列表
del list # 清空列表
list.reverse()
list.sort() #排序
list.sort(reverse=True) # 倒过来排序
n = len(list)
sum(list)
max(1,2)
min(list)
max("Hello")

sorted(list)
list.sort()

reversed(list)
list.reverse()

元组

tuple = (1,2,3)
tuple = (1,)   #只有1个元素
tuple=()   #有0个元素

不可以修改元组内元素的值,和列表不一样
元组支持连接,乘法操作
字符串属于元组

字典

默认会按照key排序的

dict1 = {'wang':23,'zhang':20,'li':30}
dict2 = dict(wang=23,zhang=20)
dict1['zhang']=200
len(dict1)
x=dict1.get(10000)
print(x)  #输出None
x = dict1[10000] # 报错

x=dict1.get(1000,'没有')
print(x)  #如果存在就输出值,如果不存在就输出没有

if(key in dict1):
	print("Yes")

遍历

# 遍历每一项
for key,value in dict1.items():
    print(key,value)

# 遍历key
for key in dict1.keys():
    print(key,dict1[key])

# 遍历value
for value in dict1.values():
    print(value)

# 按照key排序后再遍历
for key,value in sorted(dict1.items()):
    print(key,value)
dict1 = {}
dict1 = dict.fromkeys((1,2,3),'wang')
print(dict1)  # {1: 'wang', 2: 'wang', 3: 'wang'}
dict1.pop(1) #删除key
dict1.popitem() #随机删除一项

集合

set1 = {5,3,1,8}
list1 = [1,5,3,4]
set2 = set(list1)


if(5 in set1):
	print("Yes")

set1.add(8)
set1.remove(8)

set3 = frozenset(list1) #不可变的集合,不可以添加删除元素
# 序列化
>>> nums=[6, 9, 4, 1, 3, 2]
>>> list(enumerate(nums))
[(0, 6), (1, 9), (2, 4), (3, 1), (4, 3), (5, 2)]

>>> a=['wang','li','zhang']
>>> b=[20,30,40,10,50,60]
>>> list(zip(a,b))
[('wang', 20), ('li', 30), ('zhang', 40)]

函数

# 判断是不是质数
def isPrime(n):
    for i in range(2,n//2):
        if(n%i==0):
            return False
    return True

# 调用
res = isPrime(2)
res = isPrime(n=12)

函数内的变量全都是局部变量,想用全局变量用global修饰

x=50
def func():
	global x
	x=20

传递列表可以修改值,其他传递参数不可以修改值

# 这个列表是可以修改值的,并且永久有效
def fun1(nameList):
    nameList[0]='wang'
    for name in nameList:
        print(name)

#这样调用可以允许修改值
fun1(list)     
# 这样调用传递副本过去,防止修改数据
fun1(list[:])

从模块中导入函数

# 从Module.py中导入函数
from Module import fun1
fun1('zhang','san',age=16,sex='男')
import Module as m
m.fun1('zhang','san',age=16,sex='男')

内嵌函数

# 内嵌函数
def fun1():
    print("fun1被调用了")
    def fun2():
        print("fun2被调用了")
    fun2()

# 调用
fun1()

闭包函数

# 闭包函数
def fun1(x):
    def fun2(y):
        return x*y
    return fun2 #不能加圆括号

# 调用方法1
i = fun1(5)
res = i(8)
print(res) # 结果是40

# 调用方法2
res = fun1(6)(7)
print(res) # 结果是42
# 闭包函数
def fun1():
    x=5
    def fun2():
        nonlocal x # 申明为非局部变量,使用父亲的变量
        x =x*x
        return x
    return fun2() # 加圆括号

# 调用方法
i = fun1()
print(i)

必选参数, 默认参数,可选参数,关键字参数

可选参数会打包成元组, 关键字参数打包成字典

def func(sid, name, grade=2015, *args, **kwargs):
    print("sid:" + sid)
    print("name:" + name)
    print(grade)
    print(args)
    print(kwargs)

调用: 
func('15001', 'wang', 2016, 1, 2, 3, age=20, sex='男')
输出结果:
sid:15001
name:wang
2016
(1, 2, 3)
{'age': 20, 'sex': '男'}

调用:
func(sid='15001', name='wang', grade=2016, a=1, b=2, c=3, age=20, sex='男')
输出结果:
sid:15001
name:wang
2016
()
{'a': 1, 'b': 2, 'c': 3, 'age': 20, 'sex': '男'}
def func(*args,**kwargs):
    print(args)
    print(kwargs)


调用:
func(a=1,b=2,c=3,age=20,sex='男')
输出结果: 
()
{'a': 1, 'b': 2, 'c': 3, 'age': 20, 'sex': '男'}

调用:
func(a=1,b=2,c=3,age=20,sex='男')
输出结果:
()
{'a': 1, 'b': 2, 'c': 3, 'age': 20, 'sex': '男'}

匿名函数

# 匿名函数
f = lambda x:2*x+1
print(f(4))  # 结果是9

过滤器

# 偶数返回false
def odd(x):
    if(x%2==0):
        return False
    else:
        return True

lst=[0,1,2,3,4]
obj = filter(odd,lst) # 过滤掉偶数
print(list(obj))
# 使用匿名函数,代码简洁
list(filter(lambda x:x%2, range(10)))

文件

文件读写模式: http://www.runoob.com/python/python-files-io.html

f = open("D:\\1.txt") # 默认是GB2312编码,默认只读权限
f = open("D://1.txt",'r',encoding='utf-8')
x=f.readline() # 读取一行文字
x = f.read() # 默认参数是-1读取全部内容
x=f.tell() # 告诉文件光标的位置
x=f.seek(6,0) # 光标从第0位置向后移动6个位置
f.close()

遍历文本

# 推荐这样遍历文件
for each in f:
    print(each,end='')

list1 = list(f) # 文件按照行转为字符串列表
# 这样遍历文件效率特别低
lines = list(f)
for each in lines:
    print(each,end='')

写入文本

f = open("D://1.txt",'w') # w表示创建新文件或者覆盖写入,默认GB2312编码
f = open("D://1.txt",'w',encoding='utf-8')
f.writelines("你在干嘛呢")
f.write('哈哈哈哈')
f.close()

使用with后不管with中的代码出现什么错误,都会进行对当前对象进行清理工作,都会执行file.close()方法

try:
    with open("D:\\不存在的文件") as f:
        x=f.read()
        print(x)
except Exception as err:
    print(err)

写入二进制数据

import pickle

list1 = [123,3.14,'小甲鱼']
file = open('D:\\1.data','wb') #二进制写入文件
pickle.dump(list1,file)
file.close()

读取二进制数据

import pickle

file = open('D://1.data','rb')
list2 = pickle.load(file)
print(list2)

删除文件

import os
#判断文件是否存在
if(os.path.exists(dirPath+"foo.txt")):
  os.remove(dirPath+"foo.txt")

模块

import random
x = random.randint(1,10) #产生随机数[1,10)

import random as r
r.randint(1,10)

# 从列表中随机选一个
string = random.choice(list1)
import os
os.getcwd() # 输出当前工作路径
os.chdir("D:\\") # 改变路径
os.listdir(path='D:\\') #输出路径下面的所有文件和文件夹

os.system('cmd') # 运行shell命令
os.system('calc') #打开计算器

from 语句让你从模块中导入一个指定的部分到当前命名空间中

# 只会将 模块文件Module.py 里的 ElectricCar单个类引入进来
from Module import ElectricCar

安装模块的3个方法:

方法1:使用pycharm安装
需要配置为清华源 https://pypi.tuna.tsinghua.edu.cn/simple/

方法2:pip安装
cmd中输入 pip install -i http://mirrors.aliyun.com/pypi/simple/ django
或者 python -m pip install PyQt5 -i https://mirrors.aliyun.com/pypi/simple/

方法3: 下载whl文件后再安装
cmd中输入 pip install D:\\Twisted-18.7.0.dev0-cp37-cp37m-win_amd64.whl
注意:
其中cp37表示python3.7版本
路径分隔符是\\

关于__init__

在这里插入图片描述
__init__.py为空
student.py中有个类class Stu:
那么test.py中可以写

from model.student import Stu
a = Stu('xiaoming')

详见:https://github.com/chenyuntc/pytorch-book/blob/master/chapter6-xxx.md 6.1.3部分

异常处理

更多异常: http://www.runoob.com/python/python-exceptions.html

try:
    a = int("abc")
    f = open("不存在的文件.txt")
    print(f.read())
    f.close()
except OSError as err:
    print(err)
except ValueError as err:
    print(err)
finally:
    print("拜拜")

文件IO异常使用with更加简洁


else也可以与while搭配

while x>0:
    x-=1
else:
    print("x<=0")

else也可以与异常搭配

try:
    x=int('123')
except ValueError as err:
    print(err)
else:
    print("没有数字转换异常")

easygui

安装方法: cmd中输入pip install --upgrade easygui

import easygui as g
import sys

while 1:
        g.msgbox("嗨,欢迎进入第一个界面小游戏^_^")

        msg ="请问你希望在鱼C工作室学习到什么知识呢?"
        title = "小游戏互动"
        choices = ["谈恋爱", "编程", "OOXX", "琴棋书画"]

        choice = g.choicebox(msg, title, choices)

        # note that we convert choice to string, in case
        # the user cancelled the choice, and we got None.
        g.msgbox("你的选择是: " + str(choice), "结果")

        msg = "你希望重新开始小游戏吗?"
        title = "请选择"

        if g.ccbox(msg, title):     # show a Continue/Cancel dialog
                pass  # 用户继续玩游戏
        else:
                sys.exit(0)     # 用户取消就退出

面向对象

class Student:
    name="" #共有属性
    __age=0 #两个下划线开头的是私有属性

    # 构造函数
    def __init__(self,name,age):
        self.name = name

    def sayHello(self):
        print(self.name,"你好")

    # 两个下划线开头的是私有函数,外人无法访问
    def __no(self):
        print("两个下划线开头的是私有函数,外人无法访问")

    # 控制私有属性
    def setAge(self,age):
        self.__age = age
    def getAge(self):
        return self.__age

stu = Student('wang',24)
stu.sayHello()

继承

class Person:
    def __init__(self):
        self.name = "Person"
        self.age = 0
    def hello(self):
        print("xx向你问好")

# 继承Person
class Boy(Person):
    def __init__(self):
        super().__init__() # 调用父类的函数
        self.hobby = "玩游戏"
    def hello(self):
        print("Boy向你问好")

python支持多重继承

class Student(Base1,Base2):
	...

组合

class Turtle:
    def __init__(self,num):
        self.num = num

class Fish:
    def __init__(self,num):
        self.num = num

# 水池里包含乌龟和鱼
class Pool:
    def __init__(self,turtleNums,fishNums):
        self.turtle = Turtle(turtleNums)
        self.fish = Fish(fishNums)
    def showPool(self):
        print("该水池里共有乌龟%d只,小鱼%d条"%(self.turtle.num,self.fish.num))

p = Pool(5,6)
p.showPool()

BIF(bulit in function)内置函数

class A:
	pass

class B(A):
	pass

# 判断B是不是A的子类
issubclass(B,A)  #True
issubclass(B,B)  #True
issubclass(B,object) #True

# 判断是不是这个类
isinstance(object,classInfo)
hasattr(stu,'sno')
x = getattr(stu,'name',"没有找到")
setattr(stu,'sex','男') #增加属性
delattr(stu,'sex') #删除属性
del stu.age #删除属性

构造函数和析构函数

class Student:
    def __init__(self):
        print("构造函数")
    def __del__(self):
        print("析构函数,销毁时调用")

操作符重载

class Student:
    def __init__(self,name,score):
        self.name=name
        self.score = score
    def __add__(self, other):
        return self.score+other.score
    def __sub__(self, other):
        return self.score-other.score

s1 = Student('wang',60)
s2 = Student('li',70)
print(s1+s2)  #自定义加法,输出130

断言测试

assertEqual(a, b)    #核实a == b
assertNotEqual(a, b)   
assertTrue(x)   #核实x 为True
assertFalse(x)
assertIn(item , list )    #核实 item 在 list 中
assertNotIn(item , list )  

进程休眠

import time
time.sleep(5)

正则表达式

更多详见我的其他博客: https://blog.youkuaiyun.com/wang342626/article/details/89099889

re.search(r'.','I love FishC.com')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值