自学python

南京大学Coursera–用python玩转数据

range函数

当我们需要一个数列,特别是等差数列,这个时候就可以使用range函数:
range(start,end,step)
range(start,end) #默认步长为1
range(end) #默认start = 0, step = 1;

  • range函数产生一系列整数,返回一个range对象;
>>> list(range(3,11,2))
[3,5,7,9]
  • 惰性计算,适合处理大数据,类似一个”lazy list”;
自定义函数的默认参数问题

默认参数都必须写在后面,不允许出现如下情况:

def (x = false,y):
    balabala
lambda函数
def my_add(x,y) :
    return x+y

等价于:

my_add = lambda x,y : x + y
一个典型的递归问题

一般的来说,同一个问题使用递归方案会比使用循环方案更消耗资源(时间,内存),但是有些问题目前只有递归方案解决,例如汉诺塔问题。

def hanoi(a,b,c,n):    #借助b将n个盘子从a搬动到c
    if n == 1:
        print(a,'->',c)
    else:
        hanoi(a,c,b,n-1)  #借助c将n-1个盘子从a搬动到b
        print(a,'->',c)   #把a的最大的盘子搬动给c
        hanoi(b,a,c,n-1)  #然后将b上的n-1个盘子借助a移动到c

hanoi('a','b','c',4)        
for循环
for iter_var in iterable_object:
    suite_to_repeat

其中,iterable_object一般是这么几类(要求是可迭代对象):
- String
- List
- Tuple
- Dictionary
- File

循环中的else
  • 如果循环代码从break处终止,跳出循环
  • 正常结束循环,则执行else中的代码
    这样的设计,有一个特别适合的例子:
    判断素数:
from math import sqrt
num = int(input('please enter a number:'))
j = 2
while j <= int(sqrt(num)):
    if num % j == 0:
        print('{:d} is not a prime.'.format(num))
        break
    j += 1
else:  #python中else可以和while、for连接,在“正常完成循环”时,执行语句
    print('{:d} is a prime.'.format(num))
多重赋值(有时也称作为“序列解包”)

多重赋值PI,r = 3.14,4的本质由两个步骤构成:

>>>temp = 3.14,4 #元组打包(Tuple packing)
>>>PI,r =3.14,4 #序列解包(Sequence unpacking)
round函数:四舍六入五成双
>>> round(3.4)
3
>>> round(4.6)
5
>>> round(3.5)
4
>>> round(2.5)
2

来自《fluent Python》的第一段代码,看不懂

import collections

Card = collections.namedtuple('Card',['rank','suit'])

class FrenchDeck:
    ranks = [str(n) for n in range(2,11)] + list('JQKA')
    suits = 'spades diamonds clubs hearts'.split()

    def __init__(self):
        self._cards = [Card(rank,suit) for suit in self.suits for rank in self.ranks]

    def __len__(self):
        return len(self._cards)

    def __getitem__(self,position):
        return self._cards[position]

deck = FrenchDeck()
a = len(deck)
b = deck.__getitem__(51)    
print(a)
print(b)

关于“对象、类、元类”

Python 类与元类的深度挖掘这个讲得容易懂。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值