学习python的第二周

函数

函数的参数

def power(x):#其中的x就是位置参数

return x*x

默认参数:

def power(x,n=2):#其中n=2是默认值

s=1

while n>0:

n=n-1

s=s*x

return s

print(power(2,3))#其中3这个参数如果不传入,那么就会默认为2

这里需要注意的是,默认参数必须放在必选参数(例如本函数的x)的后面;而且,默认参数必须指向不变对象!!

可变参数:

由于参数个数不确定,我们首先想到可以把a,b,c……作为一个list或tuple传进来,这样,函数可以定义如下:

def calc(a):#将参数用list或者tuple传进来

sum=0

for n in a:

sum=sum+n*n

return sum

print(calc([1,2,3]))#结果是打印:14

当然,我们也可以不传入list或者tuple,此时只需要在参数前面加一个*号,这是参数就可以传入一个或者多个。例如:

def calc_1(*c):

sum=0

for m in c:

sum=sum+m*m

return sum

print(calc_1(1,2,3))#结果是打印:14

此时参数不能再传入list或者tuple,但是可以在list或者tuple前面加一个*,将其元素变成可变参数

关键字参数:

#关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。例如:

def person(name,age,**kw):

    print('nmae:',name,'age:',age,'other:',kw)

datas={'city':'beijin','jod':'student'}

person('John',18,**datas)

**表示定义关键字参数,在dict前加**表示将这个dict的元素变成关键字参数传入

命名参数:

命名关键字参数需要一个特殊分隔符**后面的参数被视为命名关键字参数。

def person_1(name,age,*,city,job):

    print(name,age,city,job)

person_1('jack',24,city='beijing',job='student')#除了city和job,其他的都无法被传入

命名参数传入时必须带上参数名,否则会报错

参数组合

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

递归函数

递归函数即函数内部调用本身。例如

def fact(n):#计算阶乘n!

    if n==1:

        return 1

    return n*fact(n-1)#在此处调用本身

print(fact(10))

高级特性

切片

#对这种经常取指定索引范围的操作,用循环十分繁琐,

#因此,Python提供了切片(Slice)操作符,能大大简化这种操作。

L=[1,2,3,4,5]

print(L[0:3])#从零开始索引,到3结束,但是不包括3

print(L[1:3])

print(L[-2:-1])#倒数切片

L1=list(range(50))#创建一个[0,50)的list

print(L1[:10:2])#每十个数,每两个取一个

print(L1[::2])#所有的数,每五个取一个

print(L1[:])#表示原样复制一个L1

print('ABCDEFG'[:3])#字符串也可以看成一种list

print('ABCDEFG'[::2])#所有的元素每两个取一个

迭代

d={'a':1,'b':2,'c':3}#定义一个dict

for a in d:

    print(a)#单纯遍历Key值

for b in d.values():

    print(b)#单纯输出values值

for c in d.items():

    print(c)#既输出key值,又输出values值

#字符串也可以是迭代对象

#通过collections.abc模块的Iterable类型判断一个对象是否是可迭代对象

from collections.abc import Iterable

print(isinstance('abc',Iterable))#返回true

print(isinstance([1,2,3],Iterable))#返回true

print(isinstance(123,Iterable))#返回false

列表生成式

#列表生成式

print(list(range(1,11)))#生成一个(0,1)范围内的list

List_1=[x*x for x in range(1,11)]#用列表生成式生成一个[1x1,2x2....10x10]的list

print(List_1)

#for循环后面还可以加上if语句

print([x*x for x in range(1,11) if x%2==0])#筛选出仅偶数的平方

#还可以使用两层循环,可以生成全排列:

print([m+n for m in 'ABC' for n in 'XYZ'])

#for循环其实可以同时使用两个甚至多个变量,比如dict的items()可以同时迭代key和value:

d={'x':'A','y':'B','z':'C'}

for k,v in d.items():

    print(k,'=',v)

#因此,列表生成式也可以使用两个变量来生成list:

[k+'='+v for k,v in d.items()]

print([k+'='+v for k,v in d.items()])

#最后把一个list中所有的字符串变成小写

L=['Hello','World','IBM','Apple']

print([s.lower() for s in L])

#if....else

[x if x%2==0 else -x for x in range(1,11)]

print ([x if x%2==0 else -x for x in range(1,11)])#如果if在for前面,那么必须加else,如果写在for后面则不用加else

#if 在for前面的是表达式,在for后面的是过滤条件

生成器

#在Python中,这种一边循环一边计算的机制,称为生成器:generator。

#第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:

g=(x*x for x in range(10))

for a in g:

    print(a)#通过遍历输出

def fab(max):

    n,a,b=0,0,1

    while n<max:

        print(b)

        a,b=b,a+b

        n+=1

    return 'done'

fab(5)#此时fab是一个函数

#fib函数实际上是定义了斐波拉契数列的推算规则,可以从第一个元素开始,推算出后续任意的元素,这种逻辑其实非常类似generator。

#作出修改

def fibs(max):

    n,a,b=0,0,1

    while n<max:

        yield b

        a,b=b,a+b

        n+=1

    return 'done'

f=fibs(5)

for b in f:

    print(b)

#将print(b)改成yield b之后,fibs函数就变成一个generator(生成器)函数

#如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator函数,调用一个generator函数将返回一个generator。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值