Python微软官方教程总结

笔记基于微软官方python教程,B站视频地址

相关代码及资料,Github地址

本文适用于具有C/C++基础的朋友快速了解python


1 基础

1.1 字符串

1.1.1 赋值
name='edson'

python中,单引号和双引号正常情况下没有区别,但是最好统一使用一种格式

1.1.2 拼接
first_name='Edson'
last_name='Macleod'
print('Hello '+first_name+' '+last_name)

结果为:

Hello Edson Macleod
1.1.3 特定格式
s='the dog is named Pink'
print(s.upper()) #全部大写
print(s.lower()) #全部小写
print(s.capitalize()) #仅句首大写
print(s.count('i')) #统计特定字符出现次数

输出为:

THE DOG IS NAMED PINK
the dog is named pink
The dog is named pink
2
1.1.4 简化拼接

原拼接形式:

output='Hello, '+first_name+' '+last_name

用占位符简化后的形式:

output='Hello, {} {}'.format(first_name,last_name)
output='Hello, {0} {1}'.format(first_name,last_name)

#Only avaliable in Python3
output=f'Hello, {first_name} {last_name}'

以上输出结果一致

1.1.5 数据类型转换

将一数字与一字符串用+拼接输出是有歧义的,结果会报错。

如果目的是将数字以字符串形式输出,那就需要用到转换函数

例如:

days_in_feb=28
print(str(days_in_feb)+' days in February')

利用str()将数字转换为字符串

输出结果为:

28 days in February

特别地

如果是让用户输入两个数字再输出,例如:

a=input('pls input first num')
b=input('pls input second num')
print(a+b)

默认会以字符串类型处理

5 6
56

于是在输出的时候必须改为:

print(int(a)+int(b)) #也可以是float等其他类型

才能得到数字计算结果

1.2 时间

1.2.1 获取系统当前时间

需要导入datetime库

from datetime import datetime

current_date = datetime.now()
1.2.2 获取之前的时间

需额外再导入timedelta库

from datetime import datetime,timedelta
today = datetime.now()
one_day = timedelta(day=1)
yesterday = today - one_day
1.2.3 仅保留年、月、日输出
current_date = datetime.now()
print(str(current_date.day))
print(str(current_date.month))
print(str(current_date.year))
1.2.4 固定格式
birthday=input("your birthday: ")
#Y一定要大写
birthday_date = datetime.strptime(birthday,'%d/%m/%Y')
print(str(birthday_date))

输入:25/02/1998

输出:1998-02-25 00:00:00

1.3 条件语句

1.3.1 if

例如:设定某省的税率

if province=="HeNan":
	tax=0.1
else:
    tax=0.2

需要注意的就是“冒号”:不能漏打

1.3.2 elif

当多个条件结果只可能有一种结果发生时使用

例如:多个省的税率

if province=='HeNan':
	tax=0.1
elif province=='HuBei':
	tax=0.2
elif province=='GuangDong':
    tax=0.3
1.3.3 or/in

当多个条件有相同的结果时使用

例如:某两个省有相同的税率

if province == 'Henan'or'Hubei':
    tax=0.1
elif province == 'Hebei':
	tax=0.2

或者

if province in ('Henan','Hubei'):
    tax=0.1
elif province == 'Hebei':
	tax=0.2

建议同结果条件很多时用in会相对整齐一些

1.3.4 缩进

在python中,缩进相当于C/C++中的中括号{},表示嵌套作用

例如:

if country == 'China': #只有当这条语句为真才会执行下方缩进语句
    if province in ('Henan','Hubei'):
        tax=0.1
    elif province == 'Hebei':
        tax=0.2
else:	#否则跳转到此处执行
	tax=0.0
1.3.5 and

andor对应C语言中的&&||,因此不多做阐述

1.3.6 布尔变量

TrueFalsepython中是布尔型关键词,勿当成字符串

一般是为了更好地看懂嵌套式的条件语句而使用,例如:

if gpa>= .85 and low_grade>= .70:
	honor=True
else:
	honor=False

if honor: #这样更简洁,不用写成honor==True
	print('Well done')

1.4 列表与数组

列表(List)与数组(Array)的区别:

  • Array只能同时存储一种数据类型

  • 而List可以任意混杂多种数据类型

1.4.1 列表(list)
scores=[]
scores=append(98) #在尾部加入元素
scores=append(99)
print(scores) #输出为[98,99]
print(scores[1]) #下标从0开始,故输出为99
1.4.2 数组(Array)

数组使用前需导入数组库

from array import array
scores=array('d')
scores.append(97)
scores.append(98)
print(scores)
print(scores[1])

注意第二句scores=array('d'),这是在初始化数组存储的数据类型,d是8字节的float型,其余类型可查阅python官方手册——array


另外补充一些函数

from array import array
names=['rose','jack']
print(len(names)) #打印数组长度,一组字符串长度为1
names.insert(0,'bill') #在序号0(开头)插入
print(names)
names.sort() #数组自动排序,字符串按首字母先后排
print(names)

输出结果:

2
['bill', 'rose', 'jack']
['bill', 'jack', 'rose']

继续补充,获取数组内的几个元素:

names=['bill','rose','jack']
part=names[0:2]
print(part)

其中names[0:2]是指从第0序号的元素开始,取两个元素

输出结果:

['bill', 'rose']
1.4.3 字典
  • 字典可以看作是将数字序号变成具体字符串的列表

  • 字典同样可以任意同时储存多种数据类型

例如:

person={'first':'edson'} #第一种新增元素方式
person['last']='macleod' #第二种新增元素方式
print(person) #打印完整字典内容
print(person['first']) #抓取单项

输出结果:

{'first': 'edson', 'last': 'macleod'}
edson

1.5 循环

1.5.1 for

python中的for循环与C语言区别略大,它相当于直接创建一个临时量,遍历你所指定的列表或范围,例如:

for name in ['jack','rose']:
    print(name)

输出为:

jack
rose

每个结果自带回车

也可以打印数字,例如:

for index in range(0,3):
    print(index)

输出为:

0
1
2

注意,这个range指定的范围是左闭右开的

1.5.2 while

python的while循环与C语言基本无异,无非是将格式变为:

while CONDITION :
	CODE

1.6 函数

1.6.1 定义

python的函数直接用def来定义就完事,甚至参数也不用声明类型,不像C语言还要分void,int之类的

格式如:

def func_name(para_name1,para_name2)#参数名可以直接留空
	CODE
    return X #无返回值就不用写return

再次强调,缩进不能漏

函数的定义必须在调用之前

1.6.2 参数

关于参数,python中还有一些技巧。

我们可以给一个函数设定多个参数,但除第一个参数外,其余参数都有设定默认值,这样一来,在调用函数时,可以只写入一个参数运行,或者根据需要再输入其他参数变更默认值

例如:

def get_initial(name,fu=True): #默认大写
	if fu :
		initial=name[0:1].upper
	else:
		initial=name[0:1]
	return initial

Name=get_initial(first_name) #这样Name的结果就是大写

另外,如果函数参数的定义顺序不清楚,也可以使用直接赋值使用函数

例如:

def get_initial(name,fu=True): 
	if fu :
		initial=name[0:1].upper
	else:
		initial=name[0:1]
	return initial

Name=get_initial(fu=True,name=first_name) #采用参数直接赋值,不管定义顺序

实际上,对于自定义了很多参数的函数,采用直接赋值,可以让其他维护代码的人更容易看懂,是个好习惯

2 入门

2.1 模块与包

将定义的函数封装,即形成一个模块(module),多个模块可以整合,形成一个包(package)。我们如果要使用某个别人早已设计好的函数,就需要下载对应的包,然后调用其中对应的模块的对应函数。

这样大大提升了代码的可重构性

拒绝重复造轮子

2.1.1 模块创建与使用

所谓模块,本身就是一个python文件,但是其中只进行函数的描述,例如:

  • 创建一个helpers.py的文件
def display(message,is_warning=False):
    if is_warning:
        print('This is a warning')
    print(message)
  • 接着,我们再创建一个文件demos.py

我们想在demos中使用helpers模块中的display函数,那就要先调用

调用一般有三种方式:

#将所有函数都调用并放在命名空间helpers下
import helpers
helpers.display('Not a warning') #使用时需加上命名空间

#将所有模块导入当前命名空间
from helpers import *
display('Not a warning')

#导入确切的模块到当前命名空间
from helpers import helpers
display('Not a warning')

这三种方式除了使用函数时有一点区别,无本质差异

2.1.2 包

包就是已发布的模块的集合

安装包需要用pip命令,例如安装一个名叫colorama的包

pip install colorama

如果有多个包要安装,则可以创建一个文本文件,比如requirements.txt,写入包的名称

colorama

然后用命令

pip install -r requirements.txt

一次安装多个包

2.2 虚拟环境

python安装包时,默认是安装到全局环境下的,有时候是由于不同python版本的问题,或是包的版本问题,需要切换到不同的环境下运行,这时候就需要用到虚拟环境。

由于不同系统的配置有差异,请自行查找相关资料

2.2.1 进入venv

配置完虚拟环境后,切换到对应目录,在powershell输入

.\.venv\Scripts\activate.ps1

这个是windows环境下,并且个人的目录形式,对于不同情况可能需要修改这条命令

可以看到状态前有一个(venv),表明已经进入虚拟环境

2.3 API

2.3.1 Web service

除了下载包,把模块下载到本地使用,我们也可以直接利用网络进行模块调用。

网络模块调用时需提供密钥,有时需要付费才可获得对应密钥

2.3.2 配置

在调用API之前,我们要先阅读对应API的说明文档,里面会说明调用的方法,一般还可以配合azure来配置

具体流程看微软py教程p37

2.3.3 调用

使用网络调用前,需要导入库import requestimport json

之后按照所选的API的说明文档使用

要注意是post还是get

2.4 Json

利用API反馈回来的数据通常会以json格式呈现。

json是一种标准数据格式,用来传递数据。没经过一些优化显示的json数据通常看起来很乱。

网上有一些工具,把原始json数据复制粘贴进去可以得到更直观的数据表

2.4.1 获取json

json的结构实际上类似文件夹,数据被分存在不同的目录(子类)下。因此,直接打印反馈的json中某个特定数据只需按照格式输出,例如:

print(results['firstdoc']['seconddoc']['dataname'])

打印多个可以采用循环结构(参见基础内容)

2.4.2 创建json

我们不光要接收json格式的数据,有时还需要发送json格式的数据。

准确来说,json是以关键字对应值这样的键值对的格式存储的,这种格式不禁让我们想起之前基础学过的list存储方式——字典

没错,利用json.dumps()函数,我们可以将字典格式的list直接转成json格式,例如:

person_dict=['first':'edson','last':'macleod']
person_json=json.dumps(person_dict)

person_json当中存储的就是json格式的信息了

如果要在键值对下继续创建子键值对,就需要在字典下创建字典

例如:

person_dict=['first':'edson','last':'macleod']
staff_dict={} #初始化一个新字典
staff_dict['Program Manager']=person_dict
staff_json=json.dumps(staff_dict)

这样,person就成了staff键值对下的子键值对

2.5 环境变量

利用.env来保护你的敏感信息

  1. 首先要安装dotenv包:
pip install python-dotenv

dotenv有各种对应的平台

  1. 创建文件.env,写入
PASSWORD=DON_T SHARE THIS VALUE
  1. 创建一个python文件,写入
from dotenv import load_dotenv
load_dotenv()

import os
password=os.getenv('PASSWORD')
print(password)

输出为:

DON_T SHARE THIS VALUE

在没有dotenv的保护下,os.getenv('OS')返回的结果是Windows_NT

2.6 装饰器(decorator)

当我们要自己创建框架时,就会需要用到装饰器

先看一个本地创建的装饰器使用例:

def logger(func):
    def wrapper():
        print('Logging execution') #code1
        func()	#code2
        print('Done logging')	#code 3
    return wrapper

@logger #调用装饰器
def sample():
    print('-- Inside sample function')

sample()

输出结果为:

Logging execution
-- Inside sample function
Done logging

于是我们可以看到,这段程序先是运行了code1,接着运行code2,对应的是下面的sample函数,然后再运行code3

所谓装饰器,效果就是让你的代码运行出来有个类似“正在登录…”,中间执行,最后“完成”,这样的框架。这也是装饰器的最普遍应用。

当然,装饰器也可以用特殊方式通过网络调用使用,并不一定要自己设定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值