Python笔记

常用函数

  1. 关于遍历
knights = {'gallahad': 'the pure', 'robin': 'the brave'}
for k, v in knights.items():  # 同时获得字典的key和value
    print(k, v)
==>gallahad the pure
   robin the brave
   
for i, v in enumerate(['tic', 'toc', 'toe']):
    print(i, v)
==>0 tic                      # 同时获得序列的索引和内容
   1 toc
   2 toe
   
questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']
for q, a in zip(questions, answers):
    print('What is your {0}?  It is {1}.'.format(q, a))
                              # 同时遍历两个或更多的序列
                              
sorted([])reversed([])      # 顺序、逆序遍历
  • sorted()函数与sort()函数的区别:
    1.sort()是应用在 l i s t list list上的方法,sorted()可以对所有可迭代的对象进行排序操作。
    2.sort()方法返回的是对已经存在的列表进行操作,而内建函数sorted()方法返回的是一个新的 l i s t list list,而不是在原来的基础上进行的操作。
  • reversed()函数:反转迭代器,不排序,返回迭代器(而不是 l i s t list list
  1. zip()函数:将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的zip对象。
import random
X = [1, 2, 3, 4, 5, 6]
y = [0, 1, 0, 0, 1, 1]
zipped_data = list(zip(X, y))
# 将样本和标签一一对应组合起来,并转换成list类型方便后续打乱操作,shuffle不能对zip对象操作

random.shuffle(zipped_data)
# 使用random模块中的shuffle函数打乱列表,原地操作,没有返回值

new_zipped_data = list(map(list, zip(*zipped_data)))
# zip(*)反向解压,map()逐项转换类型,list()做最后转换

new_X, new_y = new_zipped_data[0], new_zipped_data[1]
# 返回打乱后的新数据

print('X:', X, '\n', 'y:', y)
print('new_X:', new_X, '\n', 'new_y:', new_y)
  1. eval()函数:去掉()内的""并执行剩下语句。另,exec()可以执行更复杂的字符串代码。
eval('print("Hello World!")')
==> Hello World!
  1. input()函数:返回字符串类型。
  2. map(function, iterable, ...)函数:第一个参数function以参数序列中的每一个元素调用function函数,返回包含每次function函数返回值的迭代器。
  3. dir()函数:找到模块内定义的所有名称,以一个字符串列表的形式返回。
  4. f.write()函数:将 s t r i n g string string 写入到文件中, 然后返回写入的字符数。
  5. all()函数:迭代元素只要有 0、空、None、False 都返回 False。特别:空元组和空列表返回 True。判断单个元素可以用bool()
  6. chr()函数:输入整数,输出对应字符;ord()函数:输入字符,输出整数。
  7. round()函数:四舍六入,五看精度不定。

小技巧

  1. 定义一个无穷大的数:a = float('inf')
  2. %运算可以判断整数,因为任何整数 n%1==0。
  3. 判断闰年:整百年能被400整除,非整百年能被4整除。
  4. 当处理一个文件对象时, 使用 with 关键字是非常好的方式。在结束后, 它会帮你正确的关闭文件。 而且写起来也比 try - finally 语句块要简短:
with open('/tmp/foo.txt', 'r') as f:
  read_data = f.read()
  
f.closed
==> True
  1. 实现两个字典合并:
dict_all = dict(dict1, **dict2)  # **不可省略

dict1.update(dict2)  # 把dict2合并进dict1里,没有返回值,即不能赋给新字典
  1. 以下语句中,用from ... import语句调用该脚本时function()会自动执行,这是我们不愿发生的。加入__main__判断语句可避免这种情况。
# function()
if __name__ == '__main__':
    function()
  1. 以下注释掉的部分无法用ctrl+c停止。
import time

# while True:
#     try:
#         print("Wheeeee! You can't stop me")
#         time.sleep(0.2)
#     except:
#         print("Whatever I'm still running!")

while True:
    try:
        print("Wheeeee! You can't stop me")
        time.sleep(0.2)
    except Exception:
        print("Whatever I'm still running!")
  1. 涉及到固定数据的检索等操作时,集合(set)比列表(list)效率要高。
  2. Mutable defaults问题,当期望函数形参类型是列表时注意一下。
def add_names_to_agg_list(names, aggregate_list=[]):
    for name in names:
        aggregate_list.append(name)
    return aggregate_list

print(add_names_to_agg_list(['Mary', 'Rick', 'Morty']))
print(add_names_to_agg_list(['Mary', 'Rick', 'Morty']))

==> ['Mary', 'Rick', 'Morty']
==> ['Mary', 'Rick', 'Morty', 'Mary', 'Rick', 'Morty']
---------------------------------------------------------

def add_names_to_agg_list(names, aggregate_list=None):
    if isinstance(aggregate_list, type(None)):
        aggregate_list = []
# or
    # if not aggregate_list:
        # aggregate_list = []
    for name in names:
        aggregate_list.append(name)
    return aggregate_list

print(add_names_to_agg_list(['Mary', 'Rick', 'Morty']))
print(add_names_to_agg_list(['Mary', 'Rick', 'Morty']))

==> ['Mary', 'Rick', 'Morty']
==> ['Mary', 'Rick', 'Morty']

注意事项

  1. 与 Matlab 不同,list[2:6:3]解释为[开始:结束(不包括):间隔(负数为倒序)]
  2. 元组元素不可改变,但可以为可变的列表。
tup = ([1,2],);  tup[0][1] = 3;  
print(tup[0])
==> [1, 3]
  1. 与运算and从左到右若所有值均为真,则返回最后一个值,若存在假,返回第一个假值;和或运算or一起出现时有更高优先级。
1 and 0 and False and 2
==> 0
1 and 2
==> 2
  1. 或运算or从左到右返回第一个为真的值。
  2. random.randint(a, b)生成的随机数包括 b。
  3. 反斜杠可以用来转义,使用r可以让反斜杠不发生转义。如r"this is a line with \n"\n会显示,并不是换行。
  4. True == 1;False == 0。 ※ True ≠ 2
  5. 构造包含 1 个元素的元组,需要在元素后添加逗号。
tup = (20,)			# 不加逗号type(tup) == int
  1. 可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
  2. //:向下取接近商的整数。
  3. \r:回车,将\r后面的内容移到字符串开头,并逐一替换开头部分的字符,直至将\r后面的内容完全替换完成。
print("Hello\rWorld!")
==> World!
print('google taobao\r123456')
==> 123456 taobao
  1. 多继承:方法在子类中未找到时,从左到右查找父类中是否包含方法。
  2. 声明函数时,加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数;加了两个星号 ** 的参数以字典的形式导入。
  3. 声明函数时,参数中星号 * 可以单独出现,如果单独出现,星号后的参数必须用关键字传入。
def f(a,b,*,c):
  return a+b+c
  
f(1,2,c=3)
  1. lambda函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ms. Groves

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

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

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

打赏作者

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

抵扣说明:

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

余额充值