python学习之函数一

python学习笔记之函数一
一、数据
1.序列内存示意图:在这里插入图片描述
2.字典解包操作
在这里插入图片描述
3.zip()并行迭代:可对多个序列进行并行迭代,zip()函数在最短序列“用完”时就会停止。

names=['高高','洋洋','燕燕']
ages=[20,54,12]
jobs=['老师','程序员','公务员']
for name,age,job in zip(names,ages,jobs):
    print('{0}---{1}----{2}'.format(name,age,job))

二、函数及面向对象:
1.函数基本分类:内置函数、标准库函数(通过import语句导入)、第三方库函数(python社区提供了很多高质量的库,下载安装这些库后,通过import语句导入,然后使用)、用户自定义函数
2.函数调用内存使用情况分析:
在调用函数时会在堆里开辟空间存储对象,然后在栈里开辟函数名空间存储堆空间的地址。
3.通过help(函数名.doc)打印注释

def ziptest():
    '''
                人生苦短
                我爱python
                yayayd
            '''
    names=['高高','洋洋','燕燕']
    ages=[20,54,12]
    jobs=['老师','程序员','公务员']
    for name,age,job in zip(names,ages,jobs):
        print('{0}---{1}----{2}'.format(name,age,job))

help(ziptest.__doc__)

4.全局变量和局部变量:
在这里插入图片描述
5.global关键字,修改全局变量,global()、local()函数示例:

a=4 #全局变量
def test():
    b=4
    global  a
    a=300
    print(a,b*10)
    print(locals())
    print(globals())
test()
print(a)

在这里插入图片描述
6.参数的传递(可变对象与不可变对象)
当传入的是可变对象,则形参和实参指向同一对象,操作都在统一个对象上进行
当传入的对象是不可变对象,传递的也是对象的引用,开始时形参指向不可变对象的,当对不可变对象进行操作时,由于不可变对无法修改,系统会创建一个对象,此时形参指向新的对象(故不会修改到实参的值)
7.浅拷贝和深拷贝(浅拷贝只拷贝父本本身;深拷贝拷贝全部,包括子代)
两个内置函数:浅拷贝copy() --不拷贝对象的内容,只拷贝子对象的引用; 深拷贝deepcopy()–连子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象
示例:浅拷贝

import  copy
a=[10,20,[5,6]]

b=copy.copy(a)
print("a:",a)
print("b;",b)

b.append(30)
b[2].append(7)

print("----浅拷贝---")
print('a=',a)
print('b=',b)

输出:在这里插入图片描述
内存示意图:
在这里插入图片描述
示例:深拷贝

import  copy

#测试深拷贝
def testDeepCopy():
    a = [10, 20, [5, 6]]

    b = copy.deepcopy(a)
    print("a:", a)
    print("b;", b)

    b.append(30)
    b[2].append(7)

    print("----深拷贝---")
    print('a=', a)
    print('b=', b)

testDeepCopy()

输出:在这里插入图片描述
内存示意图:
在这里插入图片描述
8.传递不可变对象时,不可变对象包含可变对象,如果发生拷贝是浅拷贝
9.参数的类型:
位置参数
默认值参数
命名参数

def test10(a,b,c,d):
    print('{0}---{1}---{2}----{3}'.format(a,b,c,d))
def test2(a,b,c=10,d=20):  #默认值参数,必须位于其他参数后面
    print('{0}---{1}---{2}----{3}'.format(a, b, c, d))
test10(10,20,30,40) #位置参数
test10(d=20,c=30,a=25,b=10) #命名参数,通过形参名称来匹配

test2(10,20)
test2(41,20,45)

可变参数:*param(一个星号),将多个参数收集到一个’元组’对象中
**param(两个星号),将多个参数收集到一个“字典”中
强制命名参数:在带星号的可变参数后面增加新的参数,必须是强制命名参数
在这里插入图片描述
10.lambda表达式和匿名参数
在这里插入图片描述

f=lambda a,b,c,d:a+b+c+d
print(f(2,3,4,5))

g=[lambda a:a+2,lambda b:b+3]
print(g[0](6))

11.eval()函数:
在这里插入图片描述

s='print("abcd")'
eval(s)

a=10
b=20
c=eval("a+b")
print(c)

dict1=dict(a=100,b=200)
d=eval("a+b",dict1)
print(d)

结果:
在这里插入图片描述
12.递归函数:
在这里插入图片描述
示例:

#使用递归函数计算阶乘
def fad(n):
    if n==1:
        return 1
    else:
        return n*fad(n-1)

res=fad(8)
print(res)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值