DataWhale暑期夏令营学习笔记 一

一、Python的环境配置

以下链接有详细的环境配置教程,由DataWhale开源项目聪明办法学 Python 第二版提供。
聪明办法学 Python 第二版 环境配置教程
环境配置时需要注意的点:
1.如果电脑曾经安装过Anaconda相关的东西,重新安装时一定要把原来的卸载干净,卸载后检查相关的文件、文件夹、已配置的环境变量等有没有残留。
卸载教程链接: 详细卸载Anaconda
2.安装路径不要有中文,不要有中文,不要有中文!!!
3.配置环境变量时,要配置系统变量,不要使用用户变量,变量路径不要有特殊字符。
4.如果环境配置后出现问题,实在解决不了可以选择卸载干净后重装。

二、Python 基本常用语法

1. print( ) 与 注释

1.1 输出内容方法print();

print("hello, world") 
运行结果:hello, world

每一个print()会默认换行。

print("Data")
print("whale")
运行结果:
Data
whale

若不想换行则:print(“你要输出的内容”, end=“”),默认end=“\n”。
\t :表示空4个字符,类似于文档中的缩进功能,相当于按一个Tab键。
\n :表示换行,相当于按一个回车键。
\n\t : 表示换行的同时空4个字符。

print("Data", end="")
print("whale")
运行结果:Datawhale

print( )中多个内容以空格分隔。

print("Data", "whale")
运行结果:Data whale

若要修改内容间的分隔符,可以使用sep参数,比如改成以 * 连接,可以传入参数sep=“*”,默认sep=" "。

print("Data", "whale", sep="*")
运行结果:Data*whale

1.2 单行注释:使用 # 开头,# 后面的内容不会被当做代码,只能写在一行中

print("Datawhale") # for the learner,和学习者一起成长
运行结果:Datawhale

如下示例,在print(“prepare to be smart”)前加 # 则 # 后面内容不会被当作代码运行。

print("p2s")
# print("prepare to be smart")
运行结果:prepare to be smart

在写代码的时候一定不要图省事不写注释,注释的作用在于记忆的唤醒和方便对代码快速的理解,方便自己也方便他人。

2. 列表与字典

2.1 列表

列表是一种可变序列,可以将其理解为一个容器,容器的唯一作用就是打包、解包、内容传递。
以下是一个列表的定义。

p2s = ["learn", "python", "the", "smart", "way"] 
print(p2s)
运行结果:['learn', 'python', 'the', 'smart', 'way']

列表的取值可以通过在 [ ] 中传入要取值的位置进行取值操作。

print(p2s[1], p2s[0], p2s[-1], p2s[-2])
运行结果:python learn way smart

另一种是数据切片的方式,遵循左闭右开的原则,默认是从0开始到-1结束,-1表示列表的最后一个元素,切片格式为:[start:stop:step]。

print(p2s[0:2]) # 切片 左闭右开区间
print(p2s[2:]) # 起始:0,结束:-1
运行结果:
['learn', 'python']
['the', 'smart', 'way']

2.1 字典:键值对的集合

创建一个集合,并通过 add( ) 方法向集合中添加元素,集合的值不可变不可重复

dw_set = set() # 集合
for i in "Datawhale":
    dw_set.add(i)
print(dw_set)
运行结果:{'e', 'w', 'h', 'a', 't', 'D', 'l'}

以下是字典的创建,格式为 {“key”: “value”} 即 {“键”: “值”} 。

dw_dict = {"d":"Data", "w":"whale"} # key:value 
print(dw_dict["d"], dw_dict["w"], sep="")
运行结果:Datawhale

字典的更新方式如下:

dw_dict["w"] = "Whale"
print(dw_dict)
运行结果:{'d': 'Data', 'w': 'Whale'}

3. 条件判断和循环语句 if and for

3.1 条件判断语句 if

这里引入了知乎的一个小笑话: 程序员买西瓜和番茄的笑话

def 买西瓜(num):
    return f"{num}个西瓜"
def 买番茄(num):
    return f"{num}个番茄"

看到番茄 = True

# 下班了
西瓜 = 买西瓜(1)
if 看到番茄:
    西瓜 = 买西瓜(2)
print(f"带了{西瓜}回家")
输出结果:带了2个西瓜回家

# 女朋友心想
西瓜 = 买西瓜(1)
if 看到番茄:
    番茄 = 买番茄(2)
print(f"带了{西瓜}{番茄}回家")
输出结果:带了1个西瓜和2个番茄回家

3.2 循环语句for

以下是一个循环示例。

for row in range(1):
    for col in range(3):
        print("🐳", end="")
    print()

运行结果:
🐳🐳🐳
🐳🐳🐳
🐳🐳🐳

split()方法可以将字符串按照你所制定的字符进行分割,只需传入你指定的分隔符即可,比如将字符串以 , 为分割符进行分割,“learn,python”.split(“,”),默认为空格string.split(" ")。

for string in "learn python the smart way".split():
    print(string)
运行结果:
learn
python
the
smart
way

print("我,秦始皇,V50,吃肯德基".split(","))
运行结果:['我', '秦始皇', 'V50', '吃肯德基']

4.自定义函数 与 return

4.1 自定义函数

以 Rectified Linear Unit (ReLU) 函数为例,其数学表达式为:
f ( x ) = { x , x > 0 , 0 , x ≤ 0. f(x)=\begin{cases}x, x>0, \\0, x≤0.\end{cases} f(x)={x,x>0,0,x0.
用python两种自定义函数的方式进行实现:

方式一:
def ReLU(x): # f(x)
    if x > 0:
        return x
    return 0
    
print(ReLU(-9))
输出结果:0

方式二:
relu = lambda x: max(x, 0)
print(relu(-9))
输出结果:0

4.2 回调函数

回调函数学习链接: 回调函数

5. 深度抄袭and浅度抄袭

5.1 直接赋值

这里是python区别于C语言的点,python是通过指针进行赋值,a指向列表的首地址,将a的值赋给b,实际上是让b也指向列表的首地址,这时候a和b指向的是同一个值,改变其中一个,另一个也会改变。

a = [1, 2, 3, [4, 5]]
b = a
id(a) == id(b), id(a)
运行结果: (True, 1920419377408)

5.2 浅度抄袭

通过copy( )方法可以将 a 的所指向的列表拷贝一份新的,然后让 c 指向这份新的列表,但是列表中如果还嵌套列表,实际上列表中所嵌套的列表也是一个指针,这种copy( )方法只能拷贝第一层的列表,不能够把列表中嵌套的列表的值也重新拷贝一份,因此用copy( )方法拷贝出的新的列表中所嵌套列表的地址依旧没有改变,改变新列表中嵌套列表的值,旧的列表中嵌套列表的值依旧会跟随改变。

c = a.copy() # a:v1.0
a.append(6) # a:v2.0
print(f"b: {b}\nc: {c}")
运行结果:
b: [1, 2, 3, [4, 5], 6]
c: [1, 2, 3, [4, 5]]

print(f"a[3] => {a[3]}\n")
a[3].append(7) # a:3.0
print(f"b: {b}\nc: {c}")
运行结果:
a[3] => [4, 5]

b: [1, 2, 3, [4, 5, 7], 6]
c: [1, 2, 3, [4, 5, 7]]

5.3 深度抄袭

使用copy.deepcopy( )方法,可以将原数据及其嵌套数据全部重新拷贝一份。

import copy

d = copy.deepcopy(a)
a[3].append(8)
print(f"b: {b}\nc: {c}\nd: {d}")
输出结果:
b: [1, 2, 3, [4, 5, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8], 6]
c: [1, 2, 3, [4, 5, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8]]
d: [1, 2, 3, [4, 5, 7, 8, 8], 6]

6. 面向对象:托马斯小火车与它的对象们

from random import choice
import time
from tqdm import tqdm
from IPython.display import display, HTML
# 创建火车类
class Train:
    def __init__(self, name, *goods, naughty=True):
        self.name = name  # 火车的名字
        self.goods = goods  # # 火车所带的商品
        self.naughty = naughty
    
    def __getitem__(self, idx):
        return self.goods[idx]
    
    def __len__(self):
        return len(self.goods)
    
    def info(self):
        if self.name == "托马斯小火车":
            return f"Hi,我是{self.name},Cinders and ashes!"
        return f"Hi,我是{self.name}"
    
    def 发车(self, string):
        print(f"{string},上山!") # f-strings
        for _ in tqdm(range(30)):
            pass
        display(HTML("<p>聪明办法学Python</p>"))
Edward = Train("爱德华", 1,  2.5, 9, 114, 514, naughty=False) # 实例化
Edward.info()
运行结果: 'Hi,我是爱德华'

len(Edward)
运行结果:5

a, b= Edward[3], Edward[4] # 解包与打包 (114, 514) => a, b
print(f"hello {b}") # f-strings 
运行结果: hello 514

货物 = ["邮件", "大米", "煤矿", "劳斯莱斯"]
托马斯 = Train("托马斯小火车", *货物, naughty=True)
托马斯.info()
运行结果:'Hi,我是托马斯小火车,Cinders and ashes!'

len(托马斯)
运行结果:4

托马斯[2]
运行结果:'大米'

托马斯.发车("AE86")
运行结果:
AE86,上山!
100%|██████████████████████████████████████████████████████████████████████████| 30/30 [00:00<?, ?it/s]

其中的 ‘f-string’ 是一个很好用的语法。

a = 10
print(f"{a}")
运行结果:10

7. 更多 Python 的学习资料请关注《聪明办法学Python 第二版》

在这里插入图片描述

Baseline代码精读学习笔记请关注后续:DataWhale暑期夏令营学习笔记 二

笔记 二 链接: DataWhale暑期夏令营学习笔记 二

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码不跑那我跑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值