6天的时间很快就过去了,molly老师和朱老师交了很多干货(差点噎死),很多知识点还是没有很好的理解,学习一门编程语言从来不是一蹴而就的,需要长期的积累。
作为一个编程方面的小白,需要学习的东西还有很多,未来路很长需要一直坚持下去,希望未来能跟着领航团一直学下去。
百度AI Studio 是一个非常友好的平台,新的一年希望越办越好,谢谢molly老师,朱老师和助教老师们,老师们辛苦了。
指路:https://aistudio.baidu.com
https://aistudio.baidu.com/aistudio/course/introduce/7073
①整数(可以处理任意大小的数,包括负数)
②浮点数
运算符说明 | 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是一种有序的集合,可以随时添加和删除其中的元素
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]
word={'apple':'苹果’,‘banana’:‘香蕉’}
apple(key)→→→苹果(value)
只储存key,不储存value
s={'a','f'}
注意:当用一个元素的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')
while ... ... do .... . .a
格式.
关键字 成立的条件
while condition:冒号
tab do something
遍历任何序列的项目,如一个列表或一个字符串
关键字 元素 关键字 集合
for item in iterable
Tab do something
for循环多用于列表,元组,字典,集合,可以选择使用range 函数迭代
for循环可形成嵌套循环
break,continue和c的用法一样
pass(占位),先让程序跑起来
字符串索引、切片
切片的语法:[起始:结束:步长] 字符串[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()首字母大写
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))
第二种,不太懂
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种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
1.局部变量 作用域:在函数内
2.全局变量 作用域:在函数外函数优先使用局部变量 在没有局部变量的情况下, 使用全局变量
# 定义在函数内部的变量,函数结束之后自动消亡
def get_my_name():
new_name = '赵四' get_my_name()
new_name
python 使用 lambda 来创建匿名函数。
lambda 只是一个表达式,函数体比 def 简单很多。
lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
# 数字转字符串
int2str = lambda x : str(x) int2str(5)
函数名可以作为一个变量,也可以传入其他参数
一个函数可以接收另一个函数作为参数,称其为高阶函数
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wm8DHGCt-1612913975246)(en-resource://database/818:1)]
用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,依此类推,最后得到一个结果。
排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。
sorted([36, 5, -12, 9, -21])
python中的闭包从表现形式上定义(解释)为:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure).
通过设定参数的默认值,降低函数调用的难度
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标记
调用:
类名.类方法
对象.类方法
私用的属性和方法的定义:
在属性和方法名前加__两个下划线
定义:class 子类名(父类名):
情况1,如果子类有新增的属性,那么需要在子类__init方法中,调用父类的__init__
情况2,如果子类没有新增的属性,子类不需要写__init__方法
使用:
对象名 = 子类名(参数)
继承的好处:代码重用,升级功能(重写),新增功能(新的方法)
open() 为bif(内置函数),参数有多个,必须的是文件路径。 返回的一个文件对象。
file.readline(),读取文件中的一行。
多进行实践
1,使用异常时跳过有问题的数据
2,增加代码判断
open(‘work/data.txt’,‘w’)第一个参数文件路径,第二个参数打开文件的模式f.write(‘this is file content’)参数为写入的内容 f.close()关闭文件
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__)
with open('work/json.txt','w') as f:
json.dump(ath_json,f)
with open('work/json.txt') as f:
ath = json.load(f)
print(ath)
转:关于文件的一些操作
https://www.yunliyunwai.cn/blog/detail/937dd1ef3003a5b11f1c92952230b401