百度飞桨领航团python零基础训练营笔记

一些感想

勤奋如春起之苗,不见其增,日有所长;懈怠如磨刀之石,日有所亏。

6天的时间很快就过去了,molly老师和朱老师交了很多干货(差点噎死),很多知识点还是没有很好的理解,学习一门编程语言从来不是一蹴而就的,需要长期的积累。
作为一个编程方面的小白,需要学习的东西还有很多,未来路很长需要一直坚持下去,希望未来能跟着领航团一直学下去。
百度AI Studio 是一个非常友好的平台,新的一年希望越办越好,谢谢molly老师,朱老师和助教老师们,老师们辛苦了。
指路:https://aistudio.baidu.com
https://aistudio.baidu.com/aistudio/course/introduce/7073

python基础(一)

一.基本数据类型

①整数(可以处理任意大小的数,包括负数)
②浮点数

二.运算符优先级和结合性

运算符说明 python运算符 优先级 结合性 备注
小括号 () 19
索引运算符 x[i]或x[i1:i2:]\ 18
属性访问 x.attribute 17
乘方 ** 16
按位取反 ~ 15
符号运算符 +,-(正负号) 14
乘除 * / // % 13
加减 + - 12
位移 >> << 11
按位与 & 10
按位异或 ^ 9
按位或 8
比较运算符 == != >,<= 7
is运算符 is,is not 6
in运算符 in,not in 5
逻辑非 not 4
逻辑与 and 3
逻辑或 or 2
逗号运算符 exp1,exp2 1

一些小的知识点

1,字符串是以单引号’‘  双引号 ”“中包含的部分,同时空格在字符串中也有长度。
2,布尔值   True 非0
             False 0
3,空值 none python里面一个特殊的值
4,python命名与c类似

数据类型的相互转换

字符串和编码

1,python的字符串支持多种语言。
2,对于单个字符的编码,python提供了 
ord()函数获取字符的整数表示
>>> ord('中')
20013
chr()函数把编码转换为对应的字符
>>>chr(66)
'B'
3,由于python的字符是str,在内存中以Unicode表示,一个字符对应若干个字节,在保存时str对应字节为单位的bytes,以Unicode表示的str通过encode()方法编码为指定的bytes,在读取时,把bytes变为str 用decode`

4,转换时 纯英文str   变成bytes
  中文可以用utf-8编码为bytes,含有中文的str无法用ascⅡ编码(超出可以表示的范围)
  如果bytes中有无法解开的字节,decode()会报错。
  bytes只有一小部分无效的字节,可以传入erros='ignore'忽略错误

list列表

list是一种有序的集合,可以随时添加和删除其中的元素
     eg:list[0]第一个     list[-1]最后一个
①追加到末尾
grade.append('98')
②插入指定的位置
grade.insert(1,'34')
③删除末尾的方法
classmates.pop()
④删除指定位置的元素,
classmates.pop(i)    \\i为索引位置
⑤某个元素替换成别的元素,直接赋值给索引位置
grade[2]="100"
⑥list可以是任何的数据类型,和c不同,
⑦一个元素内可以是另一个元素
s=['a','b',['c','d']]
要表示d 
s[2][1]

字典的用法dict

word={'apple':'苹果’,‘banana’:‘香蕉’}
apple(key)→→→苹果(value)

集合(和数学的集合很像)不重复的set

只储存key,不储存value
s={'a','f'}

元组tuple(不可以去修改)

    注意:当用一个元素的tuple定义时必须要加一个','
    t=(1,)

总结

可变对象:list  dict   set
不可变对象 :tuple string int float bool

流程控制

if

#60分以上同学及格了
if     score<60:
       print('不及格‘)
else:
       print('及格')
#多分支:红灯停,绿灯行
if  light=='red':
    print('stop')
elif  light=='green':
    print('go')
else:
    print('wait')

循环语句 1 while

while ... ... do  .... .  .a
格式.
关键字             成立的条件
while              condition:冒号
tab             do  something

循环语句 2 for

遍历任何序列的项目,如一个列表或一个字符串
关键字        元素       关键字         集合
for            item       in                iterable
Tab                      do  something

for循环多用于列表,元组,字典,集合,可以选择使用range 函数迭代
for循环可形成嵌套循环

break,continue和c的用法一样
pass(占位),先让程序跑起来

python(二)

字符串进阶

    字符串索引、切片
    切片的语法:[起始:结束:步长] 字符串[start: end: step] 这三	个参数都有默认值,默认截取方向是从左往右的 start:默认值为0; end : 默认值未字符串结尾元素; step : 默认值为1;

如果切片步长是负值,截取方向则是从右往左的
字符串常用函数
count 计数
显示自定字符在字符串当中的个数

my_string = 'hello_world' my_string.count('o')

>>>2
find 查找
返回从左第一个指定字符的索引,找不到返回-1

my_string = 'hello_world' my_string.find('o')
print()
my_string.find('m')
>>>4
>>>-1
index 查找
返回从左第一个指定字符的索引,找不到报错
split 字符串的拆分
按照指定的内容进行分割

my_string = 'hello_world'
my_string.split('_')
>>>['hello', 'world']
字符串的替换
从左到右替换指定的元素,可以指定替换的个数,默认全部替换

my_string = 'hello_world'
my_string.replace('_',' ')
>>>'hello world'
字符串标准化
默认去除***两边***的空格、换行符之类的,去除内容可以指定

my_string = ' hello world\n'
my_string.strip()
>>>'hello world'
字符串的变形

my_string.upper() 全部大写my_string.lower()全部小写 my_string.capitalize()首字母大写

list进阶

count 计数 和 index查找(和字符串类似)

字符串的格式化输出

①和c类似但在后有%()

accuracy = 80/123
print('老板!我的模型正确率是%s!' % accuracy)
<<<老板!我的模型正确率是0.6504065040650406!

②使用format(按顺序来的)

print('大家好!我叫{},我的身高是{:d} cm, 数学成绩{:.2f}分,英语成绩{}分'.format(name, int(hight), score_math, score_english))
③使用format(可以不按照顺序)

'Hello, {name:}, 成绩提升了{score:.1f}分,百分比为 {percent:.1f}%'\ .format(name='小明', percent = 17.523, score=6)
④ f_string

name = 'Molly' 
hight = 170.4 
score_math = 95 
score_english = 89 
print(f"大家好!我叫{name},我的身高是{hight:.3f} cm, 数学成绩{score_math}分,英语成绩{score_english}分")

列表生成式(需要多练习)

Question1: 列表每一项+1

①
for i in range(len(list_1)):
    list_1[i] += 1 
list_1
②

list_1 = [1,2,3,4,5] 
[n+1 for n in list_1]

生成器

1、创建一个generator的方法
(1)、通过迭代的方法,把一个列表生成式的[ ]改成( );
(2)、如果一个函数定义中包含关键字yield,那么这个函数就不再是一个普通函数,而是一个generator;
2、输出每一个denerator的元素的方法
(1)、通过next函数一个一个打印;
(2)、for…in…迭代;
第一种方法:类似列表生成式
L = [x * x for x in range(10)]
g = (x * x for x in range(10))
第二种,不太懂

python(三)

自定义函数的创建

1,函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。     2,任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
3,函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。     4,函数内容以冒号起始,并且缩进。
5,return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
#返回多个值 def student_name_and_age(): 
"记录学生的名字和年龄" 
name = input('请输入姓名\n') 
age = int(input('请输入年龄\n')) print(f'姓名:{name};年龄:{age}') return name,age

参数传递

位置参数

位置参数是最简单的一种函数调用的方式。位置参数须以正确的顺序传入函数、数量必须和声明时的一样。

def student_name_and_age(name, age):
print('姓名:%s 年龄 %s' %(name, age))
缺省参数

调用函数时,缺省参数的值如果没有传入,则被认为是默认值

def student_name_and_age(name, age='不愿透露'): 
   "设置默认参数" 
   print('姓名:%s 年龄 %s' %(name, age))
可变参数

顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。在这个变量前加*

def all_student_names(*names):     
        for name in names: 
        print('姓名:', name)
关键字参数

关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict


def student_info(name, age, **kw):       
       print(f'我的名字叫:{name},年龄:{age},其它信息:{kw}')

此处的**kw就是关键字参数

命名关键字参数

如果要限制关键字参数的名字,就可以用命名关键字参数

def print_person_info(name, age, *, height, weight): 
print('我的名字叫:', name, '年龄:', age,'身高', height, '体重', weight)
参数的组合

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

变量的作用域和global变量
1.局部变量 作用域:在函数内
2.全局变量 作用域:在函数外函数优先使用局部变量 在没有局部变量的情况下, 使用全局变量

# 定义在函数内部的变量,函数结束之后自动消亡
def get_my_name():
       new_name = '赵四' get_my_name()
new_name

lambda匿名函数

python 使用 lambda 来创建匿名函数。
lambda 只是一个表达式,函数体比 def 简单很多。
lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。


# 数字转字符串 
int2str = lambda x : str(x) int2str(5)
高阶函数

函数名可以作为一个变量,也可以传入其他参数
一个函数可以接收另一个函数作为参数,称其为高阶函数

map()函数

map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wm8DHGCt-1612913975246)(en-resource://database/818:1)]

reduce函数

用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,依此类推,最后得到一个结果。

sorted 函数(排序)

排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。

sorted([36, 5, -12, 9, -21])
闭包(并不是很懂)

python中的闭包从表现形式上定义(解释)为:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure).

偏函数

通过设定参数的默认值,降低函数调用的难度

装饰器

python(四)

如何定义类

class Athlete:
第一部分:class定义类的关键字,Athlete符合python标识符命名规则,:表示类内容的开始def init(self,a_name,a_dob=None,a_times=[]):
第二部分:def定义函数的关键字,init 方法是一个特殊方法会在实例化对象时自动调用,我们会在这个方法中对数据进行赋值。self作为类中函数的第一个参数,方便该方法调用该类的其他属性和方法。
第三部分:自定义的属性和方法

如何使用类

1.创建对象对象名 = 类名(参数
2.使用.调用类的方法和属性
对象.属性名
对象.方法名()

使用类的好处

降低复杂性-》更少的bug-》
提高可维护行类可以将数据与函数绑定在一起,使代码模块化
调用数据和函数,使用对象名.的方式,使代码更加优雅

类属性

所有对象共享的数据


class Athlete: 
    #运动员集训了,要买东西的同学要把地址改一下 
    address = '中国足球协会训练基地xx街xx号' 
                        def__init__(self,a_name,a_dob=None,a_times=[]):
      ...........                  

使用
定义:
在 init 之上,或者说在类的范围内与方法同等级别,书写变量名=值
调用:
类名.类属性

类方法

使用

定义:
方法定义时,使用@classmethod标记
调用:
类名.类方法
对象.类方法

只能在类中进行使用(私有)

私用的属性和方法的定义:
在属性和方法名前加__两个下划线

python(五)侧重于理解

子类的使用

定义:class 子类名(父类名):
情况1,如果子类有新增的属性,那么需要在子类__init方法中,调用父类的__init__
情况2,如果子类没有新增的属性,子类不需要写__init__方法
使用:
对象名 = 子类名(参数)

继承的好处:代码重用,升级功能(重写),新增功能(新的方法)

python(六)

文件处理

open() 为bif(内置函数),参数有多个,必须的是文件路径。 返回的一个文件对象。
file.readline(),读取文件中的一行。
多进行实践

当数据有问题呢?

1,使用异常时跳过有问题的数据
2,增加代码判断

写入文件内容

open(‘work/data.txt’,‘w’)第一个参数文件路径,第二个参数打开文件的模式f.write(‘this is file content’)参数为写入的内容 f.close()关闭文件

对象转为json


import json class Athlete(json.JSONEncoder):
    ......
  
withopen('work/train_data_cor.txt') as f: 
    data =f.readline().strip().split(',')      ath=Athlete(data.pop(0),data.pop(0),data)
    print(ath)
    
ath_json =json.dumps(ath.__dict__)

类中的json形式的变量保存到文件


with open('work/json.txt','w') as f:        
        json.dump(ath_json,f)

读取json文件内容


with open('work/json.txt') as f: 
    ath = json.load(f) 
    print(ath)

转:关于文件的一些操作
https://www.yunliyunwai.cn/blog/detail/937dd1ef3003a5b11f1c92952230b401

你可能感兴趣的:(python,python)