udemy_tips+手艺_note

237 阅读12分钟

迁移到飞书

知识点

.join()
    分割符.join(列表):用分隔符将列表各个元素串联.join(['a','b','c','d'])——》abcd
    
random.sample()
    生成指定数量的随机字符,返回列表 random.sample('abcd',2)——》[b,d]

random.shuffle()
   将列表打乱顺序random.shuffle(['a','b','c','d'])——》['d','c','a','b']
   shuffle会直接修改原始列表,而不会创建一个新列表

random.choice()
   随机返回序列中的一个元素random.choice(['red','blue','green'])——》green
   
list.index(元素)
   查询列表元素的索引 
    

待学习


readlines() 
将文件中所有行作为列表返回,其中每一行都是列表对象
readline()

replace()
字符串替换方法

strip()

items()

高阶函数

接受函数为参数,或者能把函数作为结果返回的函数是高阶函数

高级函数参数

  • 关键词参数
def my_func(a,b,c):
    # do this with a
    # then do this with b 
    # finally do this with c

my_func(a=1,b=2,c=3)
调用函数时,用参数提供数值【任何顺序】
  • 默认函数参数【为可选参数提供默认值】
def my_func(a=1,b=2,c=3):
    # do this with a
    # then do this with b 
    # finally do this with c
调用函数,my_func()不用输入参数就能正常调用。
如果想修改参数,改成自定义,my_func(b=5)即可
  • 函数接受任意数量的位置参数【使用*args】
def add(n1,n2):
    return n1+n2
若要增加参数,
def add(*args):
    for n in args:
        print(n)
进入函数,可遍历所有参数,该参数是一个元祖的形式。

[args]无限位置参数,非必须,传递给函数的参数的位置
[*]这个星号才是必须,最重要的,它告诉python add函数可以接受任意数量的参数

def add(*args):
    sum = 0
    for n in args:
        sum += n
    return sum

add(1,2,3,4)

还可以通过索引访问print(args[2])
  • 任意数量的关键字参数【使用双星号运算符】
def cal(**kwargs):
 for key, value in kwargs.items():
        print(key)
        print(value)
cal(add=1,jian=2)

[kwargs] 关键字参数
[**]告诉python接收任意数量的参数

同样它也可以通过索引访问
print(kwargs["add"]

假设传入一个正常的位置参数
def cal(n,**kwargs):
    n += kwargs["add"]
    n *= kwargs['cheng']
    print(n)
cal(2,add=3,cheng=2)
(2+3)*2=10



实际创建多个可选关键字的类
class Car:
    def _init_(self,**kw):
        self.make = kw.get("make")
        self.model = kw["model"]
注意:kw.get()和kw[]的区别在于,如果关键词错误,get()会返回none而不会报错    
mycar = Car(make="nissan",model="GT-R")
print(mycar)

oop 类&对象

  pycharm和colob安装包

通过包的类来创建对象  class——》object
使用对象object的方法(method)来使用:object.method()  ——》相当于使用类的函数
使用对象的属性(attribute)来修改或...:object.attribute  ——》相当于使用类的属性值

对象属性

属性:是对象拥有的东西,且与最终结果相关的变量。

举例:
class User:
    pass
user_1=User()
user_1.id="01"
user_1.name="jack"

通过User创建了一个对象user,并给对象指定了两个属性,id和name,属性值为01和jack

对象方法【methods】

方法:是对象能干什么的功能,与特定对象相关联的函数。当函数与对象绑定的时称为方法。

语法与函数不一样:
class Car:
    ...
    def stop():
        ...    
car=Car()

car.stop()
利用汽车对象,通过. 调用car对象相关联的stop()函数


构造函数【初始化】【属性】

从类中创建我的对象时,如何指定所有的起始信息?【通过构造函数】

当对象被构造时,在编程中也叫做初始化。
初始化对象时,可以将变量设置为它们的起始值。
在python中,创建构造函数的方式是使用一个特殊的函数。


初始化函数:
class 类名:
    def __init__(self):
        initiallise attributes 初始化属性值
        ###这里写想要干什么
        
名字两边的下划线表示它是python解释器知道的一种方法,并且有一个特殊功能【初始化属性的功能】


例如:
class User:
    def __init__(self):
        print("每次创建新对象时,会触发这个")
user_2= User()

运行的结果就是在创建新对象user_2时会打印这条语句。



再比如:
class Car:
    def __init__(self,seats):
        self.seats=seats

my_car = Car(5)

init函数和init函数内部,self是正在创建或初始化的实际对象【my_car】。
还可以根据需要添加任意数量的参数。
当一个对象被创建时,类()里【这里的Car】所带的参数,一旦有参数,即使用参数来设置对象的属性。


举例:
my_car = Car(5)

通过调用类名来创建对象。
如果在init函数中,有额外的参数,也可将数据传递给那些参数,将用于设置该对象的属性。

my_car = Car(5) 那这条代码实际上就是my_car.seats=5。
这与我们自己设置的my_car=Car(),my_car.seats=5是一样的。



当创建很多对象时,需要所有相同的属性,如何搞定。如果想传递用户id,就将其添加为参数,
class User:
    def __init__(self,user_id):
        self.id=user.id
        
self.id成为与User类关联的属性,将其设置成等于任何用户获取时传入的user.id。
当创建用户时,即在类中添加user.id
user_1=User("01")

再增加一个属性
class User:
    def __init__(self,user_id,username):
        self.id=user.id
        self.username=username
(user_id)参数
(user_id)这个参数值也等于self.id的属性
这些可以随意命名,通常约定是参数的名称=属性的名称,但不强制
user_1=User("01","jack")

上面这句创建了一个新用户,用("01","jack")这些值初始化它,其中第一个值是“01”=self.id
第二个值"jack"=self.username.
如果想打印user_1的用户名,print(user_1.username)
如果想打印user_1的idprint(user_1.id)

注意:上面的例子中,当向构造函数添加参数时,
当新对象是从这个创建时,必须提供user_id和username这2条数据。

构造函数【初始化】【方法】

class Car:
    def enter_race_mode():
        self.seats=2
mycar.enter_race_mode()

在类声明中,有一个函数【当函数附加到对象时,称为方法】
self.seats=2 所做的是获取对象及获取对象属性,将其改为2
所以调用该方法时,抓住对象,然后使用. 来调用:mycar.enter_race_mode()



栗子
class User:
  def __init__(self,user_id,username):
    self.user_id=id
    self.username=username
    self.guanzhu=0
    self.fensi=0

  def follow(self,user):
    self.guanzhu += 1
    user.fensi+= 1

user_1=User("01","jack")
user_2=User("02","pei")

user_1.follow(user_2)
print(user_1.guanzhu)
print(user_1.fensi)
print(user_2.guanzhu)
print(user_2.fensi)

数据类型

元组

python里的一种数据类型:如(135),有序的数据类型,
my=(135)

和list[1,3,5]有点类似,同样元组也可通过索引来访问,但元组不能更改数值,也不可删除。

切片

[]

列表&列表推导

num = [1,2,3]
num_list = []
for n in num:
    add_1 = n+1
    num_list.append(add_1)
将上面4行代码合二为一就是列表推导。
num_list = [n+1 for n in num] 
列表推导:
new_list = [要做的事 for 列表的每一项 in 列表]
如果需要满足条件
列表推导
new_list = [要做的事 for 列表的每一项 in 列表 if 条件]

字典&字典推导

new_dict = {new_key:new_value for item in list}
注:list可以是任何可迭代的list,tuple,dictrange范围,字符串等

用现有字典的所有项目,用key和value创建新的key和新的value,来创建新字典
new_dict = {new_key:new_value for (key,value) in dict.items()}
用现有字典获取里面所有的项目,将其拆分为键和值,再循环遍历所有的每个键和每个值

添加条件
new_dict = {new_key:new_value for  (key,value) in dict.items() if 条件 }


在控制台输入
names = ['anna','joe','john','tim','tom']
import random
新建一个字典,学生名随机生成分数的字典
student_score = {student:random.randint(1,100) for student in names}


遍历字典
新建考试合格的学生字典,用student_score生成一个新字典【score>=60】
passed_student = {student:score for (student,score) in student_score.items() if score >=60}

一个类创建多个实例

一个类创建多个实例,这些实例彼此之间是互相独立的

类继承

类继承:类继承其他类的方法和属性。
比如:正常的一个类
class Fish:
    def __init__(self):
让这个类从另一个类继承,Animal是【想要继承的类】
class Fish(Animal):
    def __init__(self):
        super.__init__()
为了掌握动物类所拥有的一切,在初始化设置中添加super().__init__().
super指的是超类,初始化超类可以在鱼类中做所有事情
【理解就是继承类的所有属性和方法,父类的东西,子类全都有】

栗子:
class Animal:
    def __init__(self):
        self.eyss=2
    def breathe(self):
        print("hahaha")

class Fish(Animal):
    def __init__(self):
        super().__init__()
    def swim(self):

nemo=Fish()
nemo.swim()
nemo.breathe()

#注释nemo.breathe()也能正常调用。


如果想继承方法,并让这个方法做其他的事:
class Fish(Animal):
    def __init__(self):
        super().__init__()
    def breathe(self):
        super().breathe()
        print("do another something")
【这里的super().breathe()调用的就是父类的breathe方法】

nemo.breathe() 会调用父类的breathe方法和自己定义的breathe方法

文档读写

读&写

文件放在项目下,和运行文件同一层级

读
    1.第一种方式
    file = open("my_file.text)
    contents= file.read()
    print(contents)
    file.close

    2.第二种with关键字
    with open("my_test.txt",encoding='utf-8') as f:
        contents = f.read()
        print(contents)
    # with关键字直接管理文件,完成后会自动关闭

以中文格式打开
file = open("my_test.txt",encoding='utf-8')


写
替换文本
    with open("my_test.txt",encoding='utf-8',mode='w') as f:
        f.write("之前的文本会被直接替换成新文本。")
        
追加文本
    with open("my_test.txt",encoding='utf-8',mode='a') as f:
        f.write("\n 追加新文本")
【mode= w ——>> write】
【mode=a  ——>>append】

若文件不存在会新建文件

文件路径和文件名

在window系统,根文件夹一般是c盘。
绝对路径:相对于根目录开始。
相对路径:相对于当前的工作目录。
./    表示在当前文件夹中查找
../   表示在结构层次中向上一步到父级


打开python_project下的test.txt
with open("/python_project/my_test.txt",encoding='utf-8') as f:
    contents = f.read()
    print(contents)
    
绝对路径
with open("/user/python_project/my_test.txt",encoding='utf-8') as f:
    contents = f.read()
    print(contents)

文本的相对路径
with open("../day24/my_file.txt",encoding='utf-8') as f:
    contents = f.read()
    print(contents)

mac路径是用/分割,而win是用\分割

csv

import csv

with open("226 weather-data.csv") as file:
    data = csv.reader(file)
    tem = []
    for row in data:
        if row[1] != "temp":
            tem.append(row[1])
    print(tem)

导入模块的多种方式

模块是一个包含Python定义和语句的文件,文件名是模块名加上.py后缀

包是一个包含模块的目录,该目录下必须包含一个名为__init__.py的文件
以turtle模块里的Turtle类为例:

第一种:
    import turtle
    //导入 模块名称
    my_object = turtle.Turtle()
    
第二种
    from turtle import Turtle
    //从某模块中导入模块里的部分内容,推荐
    
第三种
    from turtle import *
    //从某模块中导入所有内容 尽量少用
    
第四种
    from turtle as t
    //给模块起别名    
    
turtle模块是与python一起打包的标准库
如果是其他模块,要先安装

pandas模块

pandas文档读写

import pandas
data = pandas.read_csv("226 weather-data.csv")
print(data['temp'])

print(round(data['temp'].mean(),2))
# 求温度这列的平均值
print(data["temp"].max())
# 求温度这列的数值的最大值

获取某列的数值
print(data['condition'])
print(data.condition)
这2个打印的内容几乎一致,上面的[]相当于字典的键值对,下面的.更像把condition理解为属性

获取某行的数值
print(data[data.temp == data.temp.max()])
在dataframe[],在[]里选择指定的列,就能获取一行的值。

获取某行指定列的数值
在获取某行的基础上,再给数据框具体的列
print(data[data.day == "Monday"].condition)


直接创建一个dataframe 数据框
    例如,由这个字典创建一个dataframe:
    data_dict ={"students":["amy","joe","tim"],"scores":[76,54,65]}
    data = pandas.DataFrame(data_dict)
    print(data)

数据框中使用循环、遍历

student_dict ={"students":['tom','tim','joe'],"score":[56,76,98]}
创建for循环遍历该字典:
for (key,value) in student_dict.items():
    print(key)
导入pandas库
import pandas
student = pandas.DataFrame(student_dict)
print(student)

遍历数据框
for (key,value) in student.items():
    print(value)
    print(key)
注:该遍历并不有用

利用pandas的内置循环,iterrows()方法来遍历【循环遍历数据框的每一行】
for (index,row) in student.iterrows():
    print(index)
    print(row)
或者使用点获取特定列下的值:
    print(row.student)
    print(row.score)
或者加入if条件使用:
    if row.student == 'tim':
        print(row.score)
        
        
在数据框中使用字典推导式:
student_dict ={"name":['tom','tim','joe'],"score":[56,76,98],"age":[12,13,15],"year":[2000,2001,2003],"month":[3,4,5],
               "day":[10,11,12]}
import pandas
student = pandas.DataFrame(student_dict)
test = {(student_row["name"],student_row["age"]):student_row for(index,student_row ) in student.iterrows()}
print(test)
输出的test格式:
{ ('tom', 12): name tom score 56 age 12 year 2000 month 3 day 10 Name: 0, dtype: object, ('tim', 13): name tim score 76 age 13 year 2001 month 4 day 11 Name: 1, dtype: object, ('joe', 15): name joe score 98 age 15 year 2003 month 5 day 12 Name: 2, dtype: object }

![test输出格式](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/b3193cabe3ac4904a901e1b0f4736087~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=614&h=605&s=56011&e=jpg&b=000000)



在上面的字典里,获取name或者age对应的值:
student_row = test[('tom', 12)] 
name_value = student_row['name'] 
age_value = student_row['age']

test字典的键是由(name, age)元组组成的,使用test[('tom', 12)]获取整个学生行数据
由于该行数据是一个 Pandas 系列,可以使用索引作 student_row['name'] 和student_row['age'] 
分别获取name 和age的值。

pandas待学习方法

item()
title()

turtle模块

Screen类的监听事件:
from turtle import Screen
my_screen=Screen()
my_screen.listen()
#语法: my_screen.onkey(function,key) 

正则

  • import re 导入正则模块
  • 本义字符 a-z A-Z 0-9
  • 特殊字符: \ + * . ? - ^ $ | ( ) [ ] { } < >

Tkinter模块

- 创建GUI 图形用户界面
导入tkinter
import tkinter
window = tkinter.Tk()
window.title('GUI program')

window.minsize(300,300)

my_label = tkinter.Label(text="标签",font=('Arial',18,'bold'))
my_label.pack(side='left')

window.mainloop()

API

  • 响应代码
1xx:等等
2xx:一切成功
3xx:go away 没有权限
4xx :you screwed up 搞砸/404
5xx :i screwed up 请求失败【服务器关闭,网站关闭或其他问题】
  • API参数