python财务编程_Python笔记 财务小白的 day4 python编程基础(2)

【本文的我,是一个文科财务工作者。在单位信息化全靠人做的年代,确实工作压力大也忙不过来。9102年的我,深感不学习点新知识迟早要被淘汰。所以今天开始记录自己的python小白笔记,各位见笑。】

编程基础部分笔记:《python编程快速上手-让繁琐工作自动化》,AI Sweigart,人民邮电出版社

day4 python编程基础(2)

CH3 函数

1.自定义函数

def hello():

print('Howdy!')

print('Howdy!!!')

print('Hello there.')

hello()

第一行是 def 语句,它定义了一个名为 hello()的函数。 def 语句之后的代码块是函数体。这段代码在函数调用时执行,而不是在函数第一次定义时执行。函数之后的 hello()语句行是函数调用。

(1)def 语句和参数

如果调用 print()或 len()函数, 你会传入一些值,放在括号之间, 在这里称为“参数”。有一个名为 name 的变元。“变元” 是一个变量, 当函数被调用时, 参数就存放在其中。

def hello(name):

print('Hello ' + name)

hello('Alice')

hello('Bob')

(2)返回值和 return 语句

用 def 语句创建函数时, 可以用 return 语句指定应该返回什么值。

import random

def getAnswer(answerNumber):

if answerNumber == 1:

return 'It is certain'

else:

return 'Very doubtful'

r = random.randint(1, 9)

fortune = getAnswer(r)

print(fortune)

请注意,因为可以将返回值作为参数传递给另一个函数调用,所以你可以将最后三行缩写成一行等价的代码:

print(getAnswer(random.randint(1, 9)))

(3)None 值

如果你希望变量中存储的东西不会与一个真正的值混淆,这个没有值的值就可能有用。有一个使用 None 的地方就是 print()的返回值。 print()函数在屏幕上显示文本, 但它不需要返回任何值,那么 print()就返回 None。

(4)关键字参数和 print()

这两个字符串出现在独立的两行中,因为 print()函数自动在传入的字符串末尾添加了换行符。但是,可以设置 end 关键字参数,将它变成另一个字符串。

print('Hello', end='')

print('World')

HelloWorld

传入 sep 关键字参数, 替换掉默认的分隔字符串(空格)。在交互式环境中输入以下代码:

print('cats', 'dogs', 'mice', sep=',')

cats,dogs,mice

2.全局变量和局部变量

处于局部作用域的变量,被称为“局部变量”。处于全局作用域的变量,被称为“全局变量”。

虽然在小程序中使用全局变量没有太大问题,但当程序变得越来越大时, 依赖全局变量就是一个坏习惯。

重要原则:

全局作用域中的代码不能使用任何局部变量;

但是,局部作用域可以访问全局变量;

一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量。

如果在不同的作用域中,你可以用相同的名字命名不同的变量。也就是说,可以有一个名为 spam 的局部变量,和一个名为 spam 的全局变量。

(1)global 语句

如果需要在一个函数内修改全局变量,就使用 global 语句。如果在函数的顶部有 global eggs 这样的代码

(2)异常处理

错误可以由 try 和 except 语句来处理。那些可能出错的语句被放在 try 子句中。如果错误发生,程序执行就转到接下来的 except 子句开始处。可以将前面除数为零的代码放在一个 try 子句中,让 except 子句包含代码,来处理该错误发生时应该做的事。

def spam(divideBy):

try:

return 42 / divideBy

except ZeroDivisionError:

print('Error: Invalid argument.')

print(spam(2))

print(spam(12))

print(spam(0))

print(spam(1))

ch4 列表

1.列表数据类型

列表”是一个值, 它包含多个字构成的序列。列表值看起来像这样: ['cat', 'bat', 'rat', 'elephant']。

(1)用下标取得列表中的单个值

42598a5bc138

image.png

列表也可以包含其他列表值。这些列表的列表中的值,可以通过多重下标来访问,第一个下标表明使用哪个列表值,第二个下标表明该列表值中的值。 像这样:

>>> spam = [['cat', 'bat'], [10, 20, 30, 40, 50]]

>>> spam[0][1]

'bat'

>>> spam[1][4]

50

(2)负数下标

整数值−1 指的是列表中的最后一个下标, −2 指的是列表中倒数第二个下标, 以此类推。

>>> spam = ['cat', 'bat', 'rat', 'elephant']

>>> spam[-1]

'elephant'

(3)利用切片取得子列表

“切片”可以从列表中取得多个值,结果是一个新列表。

spam[1:4]是一个列表和切片(两个整数)。第一个整数是切片开始处的下标。第二个整数是切片结束处的下标。切片向上增长,直至第二个下标的值,但不包括它。

>>> spam = ['cat', 'bat', 'rat', 'elephant']

>>> spam[1:3]

['bat', 'rat']

>>> spam[0:-1]

['cat', 'bat', 'rat']

作为快捷方法,你可以省略切片中冒号两边的一个下标或两个下标。省略第一个下标相当于使用 0, 或列表的开始。省略第二个下标相当于使用列表的长度, 意味着分片直至列表的末尾。

>>> spam[1:]

['bat', 'rat', 'elephant']

(4)用下标改变列表中的值

也可以使用列表的下标来改变下标处的值。例如, spam[1] = 'aardvark'意味着“将列表 spam 下标 1 处的值赋值为字符串'aardvark'。

>>> spam = ['cat', 'bat', 'rat', 'elephant']

>>> spam[1] = 'aardvark'

>>> spam

['cat', 'aardvark', 'rat', 'elephant']

(5)列表连接和列表复制

+操作符可以连接两个列表, 得到一个新列表,*操作符可以用于一个列表和一个整数,实现列表的复制。

>>> [1, 2, 3] + ['A', 'B', 'C']

[1, 2, 3, 'A', 'B', 'C']

>>> ['X', 'Y', 'Z'] * 3

['X', 'Y', 'Z', 'X', 'Y', 'Z', 'X', 'Y', 'Z']

>>> spam = [1, 2, 3]

>>> spam = spam + ['A', 'B', 'C']

>>> spam

[1, 2, 3, 'A', 'B', 'C']

(6)用 del 语句从列表中删除值

del 语句将删除列表中下标处的值, 表中被删除值后面的所有值, 都将向前移动一个下标。

>>> spam = ['cat', 'bat', 'rat', 'elephant']

>>> del spam[2]

>>> spam

['cat', 'bat', 'elephant']

>>> del spam[2]

>>> spam

['cat', 'bat']

(7)用 len()取得列表的长度

len()函数将返回传递给它的列表中值的个数, 就像它能计算字符串中字符的个数一样。

>>> spam = ['cat', 'dog', 'moose']

>>> len(spam)

3

2.使用列表

使用列表的好处在于,现在数据放在一个结构中,所以程序能够更灵活的处理数据,比放在一些重复的变量中方便。

(1)列表用于循环

一个常见的 Python 技巧, 是在 for 循环中使用 range(len(someList)), 迭代列表的每一个下标。

>>> supplies = ['pens', 'staplers', 'flame-throwers', 'binders']

>>> for i in range(len(supplies)):

print('Index ' + str(i) + ' in supplies is: ' + supplies[i])

Index 0 in supplies is: pens

Index 1 in supplies is: staplers

Index 2 in supplies is: flame-throwers

Index 3 in supplies is: binders

(2)in 和 not in 操作符

利用 in 和 not in 操作符, 可以确定一个值否在列表中。 连接两个值: 一个要在列表中查找的值, 以及待查找的列表。这些表达式将求值为布尔值。

>>> 'howdy' in ['hello', 'hi', 'howdy', 'heyas']

True

>>> spam = ['hello', 'hi', 'howdy', 'heyas']

>>> 'cat' in spam

False

(3)多重赋值技巧

多重赋值技巧是一种快捷方式,让你在一行代码中,用列表中的值为多个变量赋值。

>>> cat = ['fat', 'black', 'loud']

>>> size, color, disposition = cat

(4)增强的赋值操作

针对+、 -、 *、 /和%操作符, 都有增强的赋值操作符, 如表 4-1 所示。

42598a5bc138

image.png

3.方法

(1)用 index()方法在列表中查找值

列表值有一个 index()方法, 可以传入一个值, 如果该值存在于列表中, 就返回它的下标。如果该值不在列表中, Python 就报 ValueError。如果列表中存在重复的值,就返回它第一次出现的下标。

>>> spam = ['hello', 'hi', 'howdy', 'heyas']

>>> spam.index('hello')

0

>>> spam.index('howdy howdy howdy')

Traceback (most recent call last):

File "", line 1, in

spam.index('howdy howdy howdy')

ValueError: 'howdy howdy howdy' is not in list

(2)用 append()和 insert()方法在列表中添加值

要在列表中添加新值, 就使用 append()和 insert()方法。前面的 append()方法调用, 将参数添加到列表末尾。 insert()方法可以在列表任意下标处插入一个值。 insert()方法的第一个参数是新值的下标, 第二个参数是要插入的新值。

>>> spam = ['cat', 'dog', 'bat']

>>> spam.append('moose')

>>> spam

['cat', 'dog', 'bat', 'moose']

>>> spam = ['cat', 'dog', 'bat']

>>> spam.insert(1, 'chicken')

>>> spam

['cat', 'chicken', 'dog', 'bat']

请注意, 代码是 spam.append('moose')和 spam.insert(1, 'chicken'),而不是 spam =spam.append('moose')和 spam = spam.insert(1, 'chicken')。

方法属于单个数据类型。 append()和 insert()方法是列表方法, 只能在列表上调用, 不能在其他值上调用,

(3)用 remove()方法从列表中删除值

给 remove()方法传入一个值,它将从被调用的列表中删除。

>>> spam = ['cat', 'bat', 'rat', 'elephant']

>>> spam.remove('bat')

>>> spam

['cat', 'rat', 'elephant']

如果该值在列表中出现多次,只有第一次出现的值会被删除。

如果知道想要删除的值在列表中的下标, del 语句就很好用。如果知道想要从列表中删除的值, remove()方法就很好用。

(4)用 sort()方法将列表中的值排序

数值的列表或字符串的列表, 能用 sort()方法排序。也可以指定 reverse 关键字参数为 True, 让 sort()按逆序排序。

>>> spam = ['ants', 'cats', 'dogs', 'badgers', 'elephants']

>>> spam.sort()

>>> spam

['ants', 'badgers', 'cats', 'dogs', 'elephants']

>>> spam.sort(reverse=True)

>>> spam

['elephants', 'dogs', 'cats', 'badgers', 'ants']

关于 sort()方法,你应该注意 3 件事。

首先, sort()方法当场对列表排序。不要写出 spam = spam.sort()这样的代码,试图记录返回值。

其次,不能对既有数字又有字符串值的列表排序,因为 Python 不知道如何比较它们。

第三, sort()方法对字符串排序时, 使用“ASCII 字符顺序”, 而不是实际的字典顺序。这意味着大写字母排在小写字母之前。因此在排序时, 小写的 a 在大写的Z 之后。

5.类似列表的类型:字符串和元组

列表并不是唯一表示序列值的数据类型。例如,字符串和列表实际上很相似,只要你认为字符串是单个文本字符的列表。对列表的许多操作,也可以作用于字符串:按下标取值、 切片、用于 for 循环、 用于 len(), 以及用于 in 和 not in 操作符。

(1)可变和不可变数据类型

但列表和字符串在一个重要的方面是不同的。列表是“可变的”数据类型,它的值可以添加、删除或改变。但是,字符串是“不可变的”, 它不能被更改。

(2)元组数据类型

首先,元组输入时用圆括号(), 而不是用方括号[]。

但元组与列表的主要区别还在于,元组像字符串一样,是不可变的。 元组不能让它们的值被修改、添加或删除。

如果元组中只有一个值,你可以在括号内该值的后面跟上一个逗号, 表明这种情况。 否则, Python 将认为, 你只是在一个普通括号内输入了一个值。

(3)用 list()和 tuple()函数来转换类型

函数 list()和 tuple()将返回传递给它们的值的列表和元组版本。

>>> tuple(['cat', 'dog', 5])

('cat', 'dog', 5)

>>> list(('cat', 'dog', 5))

['cat', 'dog', 5]

>>> list('hello')

['h', 'e', 'l', 'l', 'o']

如果需要元组值的一个可变版本,将元组转换成列表就很方便。

(4)引用

A.copy 模块的 copy()和 deepcopy()函数

在处理列表和字典时,尽管传递引用常常是最方便的方法,但如果函数修改了传入的列表或字典,你可能不希望这些变动影响原来的列表或字典。要做到这一点,Python 提供了名为 copy 的模块, 其中包含 copy()和 deepcopy()函数。第一个函数copy.copy(), 可以用来复制列表或字典这样的可变值, 而不只是复制引用。在交互式环境中输入以下代码:

>>> import copy

>>> spam = ['A', 'B', 'C', 'D']

>>> cheese = copy.copy(spam)

>>> cheese[1] = 42

>>> spam

['A', 'B', 'C', 'D']

>>> cheese

['A', 42, 'C', 'D']

如果要复制的列表中包含了列表, 那就使用 copy.deepcopy()函数来代替。deepcopy()函数将同时复制它们内部的列表。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值