python第四次笔记

函数

  • 变长参数 类型为元组(元素不可变) 位置在形参最后
def self_print(name,*a):
    print(a)
    print(type(a))
    print(len(a))
self_print(1,2,1,3)
  • **将参数放到字典中
def d_self_print(**name):
    print(name)
d_self_print(first_name = 'anja',last_name = 'adsf')
  • 形参顺序:位置参数->元组->字典
def mix(name,*t,**kit):
    print(name)
    print(t)
    print(kit)
mix('ajdsfn',1,1,nae = 'name',sex = 'male')
  • *有拆元组、列表和字典的作用
t = [1,2,3,4,5]
print(t)
print(*t)
def f(*t):
    print(t)
f(*t)
  • **有拆字典的作用
def dit(**d):
    print(d)
dit(**{'name':'jans','age':12})
  • 元组的声明可以不用()
def avg(*num):
    print(*num)
    total = sum(num)
    print(total)
    avge = total / len(num)
    print(avge)
avg(1,2,3,4,5)

数据分为普通类型和引用类型
python中的基本数据类型都是普通类型。数、布尔型和字符串型
除此之外的类型都是引用类型
普通类型赋值的时候,传的是值
引用类型赋值的时候,传的是量

l1 = [1,2,3,4,5,6]
l2 = l1
l2[2] = 4
print(l1)

传参的本质是赋值操作,如果传递的是引用类型的数据,则需要注意是否在函数中对其做了修改

def power(number):
    numbers = number[:]
    # 创建数据副本
    numbers = [x**2 for x in numbers]
    print(numbers)
number = [1,2,3,4]
power(number)
print(number)

闭包

  • 函数名代表的是函数的地址
def fun():
    print('asds')
f = fun
f()
print(fun)

内层函数可以访问外层函数的值,但不能修改
内层函数访问变量时,会先从内部找,如果找不到,会层层向上查找
python 中,变量的作用域是以函数为单位
global 修改变量时,说明使用的是最外层全局变量
nonlocal 修改变量时,说明使用的是嵌套函数层的变量
闭包 闭包的本质是函数嵌套函数,外层函数返回内层函数的地址

a = 10
def outter():
    a = 10
    def inner():
        # 说明使用的是全局变量
        # global a
        nonlocal a
        print(a)
        a = a-1
        print(a)
    return inner
fo = outter()
fo()
print(a)

递归

函数自己调用自己,编写递归或循环时,一般先考虑出口(结束条件)问题

def factorial(n):
    mm =1
    for num in range(1,n+1):
        mm *= num
    return mm
print(factorial(5))
def factorial1(n):
    if n == 1:
        return 1
    return n * factorial1(n-1)
print(factorial1(5))
  • 菲波那切数列
list1 = []
k = 0
def list(n):
    global k
    global list1
    if k == 0 or k == 1:
         list1.append(1)
    else:
        list1.append(list1[k-2] + list1[k-1])
    if k == n-1:
        return list1
    k += 1
    return list(n)
n = input('请输入个数:')
print(list(n))

高阶函数

函数的参数或函数的返回值是函数的函数

def handle(func,*p):
    return func(*p)
def my_sum(*p):
    sum = 0
    for i in p:
        sum += i
    return sum
print(handle(my_sum,1,2,3,4,5))
def my_mul(*p):
    mul = 1;
    for i in p:
        mul *= i

    return mul
print(handle(my_mul,1,2,3,4,5))
  • map(func,interable)
    函数会把interable中的数据依次传递给func,最后把处理的结果返回
    [1,2,3,4,5]---->[1,4,9,16,25]
def power(x):
    return x*x
result = map(power,[1,2,3,4,5])
print(list(result))
result = map(lambda x : x*x,[1,2,3,4,5,6])

print(list(result))
  • reduce(func,interable)
    函数累计操作,func函数必须接受两个参数,reduce会把func的运行结果做一个参数,然后从interable中再取一个数据当做func的另一个参数
from functools import reduce
li = [1,2,3,4,5,6]
result = reduce(lambda x,y : x*y,li)
print(result)
  • filter(func,interable)
    根据函数func来过滤interable,将interable中的数据传入函数func中,如果函数返回True,就保留该数据,否则不保留
li = [1,2,3,4,5,6,7,8]
result = list(filter(lambda x:x%2 ==1,li))
print(result)
  • sort(interable,key=None,reverse)
    对数据进行排序,key可用来指定排序的规则,值是一个函数,reverse是来指定排序的顺序-->升序和降序
li = [1,-2,43,24,-10]
# li.sort() 影响原数列
print(li)
rs = sorted(li,key=abs,reverse=True)
# 不影响原始数列
print(rs)
print(li)

模块

模块就是一个文件,我们在编写程序时,可以把功能相似的代码放到一个模块中
导入模块的方法:
1、from 模块名 import 函数名(*为通配符)
2、import 模块名
可以使用as 给模块或函数起别名

from p17 import make_pizza as mp
from p16 import make_pizza
mp()
make_pizza()
import p17
p17.make_pizza()
p17.make_bun()
import p17 as p
p.make_bun()
p.make_pizza()
  • print(ff.doc)和help(ff)可以查看函数的注释
  • 元组数据不可改变
# 地址不变 a[1]位置储存的是列表地址
a = (1,[1,2],3)
a[1].append(3)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容