2019-05-18

def self_print(name, *a):
    # *将参数都放置到一个元组中
    print(name)
    print(a)
self_print(1, 2, 3)

** 将参数放到字典中

def d_self_print(**ren):
    print(ren)
d_self_print(lastname='zhang', firstname='san')

元组和字典混合使用

形参顺序:位置参数 ->元组-> 字典

def mix(name, *t, **kw):
    print(name)
    print(t)
    print(kw)


mix('wang', 78, 'dong', 'qin', gender='male')
# mix('wang',78,',gender='male',dong','qin') 则会报错
t = (1, 2, 3, 4, 5)
print(*t)
print(t)


def f(*tt):
    print(tt)

* 有拆开元组,列表的作用

f(*(2, 3, 4, 5, 7))

** 有拆开字典的作用

def ff(**kai):
    print(kai)


# print(**kai)会报错
# print(*kai) 将字典的key值输出
ff(**{'name': 'san', 'age': '66'})

return 返回值

def sum_and_avg(*numbers):
    total = sum(numbers)
    avg_number = total / len(numbers)
    return total, avg_number


sum, avg = sum_and_avg(1, 2, 3, 4, 5, 6, 7, 8)
print(avg)
print(sum)


def ff(**kai):
    print(kai)
    # print(**kai)


ff(**{'name': 'san', 'age': '66'})

函数的传参问题

数据分为引用类型和普通类型

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

l1 l2指向同一块内存 修改l2 l1也被改变 是引用类型
基本数据类型均为普通类型 。数 布尔 字符串型
其他的均是引用类型
普通类型赋值时传的是值
引用类型 赋值时传的是地址

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

a = 2
b = a
b = 5
print(a)


# a的值不受影响 a 和 b 占用不同内存地址
def power(numbers):
    # numbers =[x**2 for x in numbers]
    # 创建数据副本
    # numbers =numbers[:]
    numbers = list(numbers)  # 强制类型转换的同时新生成一个内存
    numbers[3] = 10
    return numbers

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(power(nums))
print(nums)

闭包

def fun():
    print('hello')


print(fun)  # 打印函数所在内存地址
# 函数名本质是函数地址
f = fun
f()
a = 10


def outter():
    # a=10  和nonlocal一起
    def inner():
        # a=a-1 会报错  因为内层函数只能访问外层变量  但不能修改
        # 内层函数访问变量时 会先从自己的内部查找 如果找不到 就会层层向上查找
        global a  # 说明使用的是全局变量,最外层
        a = a - 1
        print(a)
        # nonlocal a
        # python 中变量的作用域是以函数为单位的
        # global修饰变量时 说明使用的时最外层的全局变量
        # nonlocal 修饰变量时 说明使用的是嵌套层函数的变量
        # 闭包的本质是函数嵌套函数 外层函数返回内层函数的地址

    return inner


fo = outter()
fo()
fo()
fo()
fo()

递归 :函数自己调用自己,编写递归或循环时 先考虑出口问题

fibonacci数列

def factorial(n):
    mm = 1
    for num in range(1, n + 1):
        mm *= num
    return mm


def factorial1(n):
    if n == 1:
        return 1
    return n * factorial1(n - 1)


print(factorial(5))
print(factorial1(5))

作业:斐波那契数列 递归实现,循环实现

def fbnq(n):
    if n < 3:
        return 1
    return fbnq(n - 1) + fbnq(n - 2)


for i in range(1, 33):
    print(fbnq(i))

  • 递归
def fibonacci(n):
    if n == 1 or n == 2:
        return 1
    return fibonacci(n - 1) + fibonacci(n - 2)

  • 循环
def fibonacci_for(n):
    before = 0
    after = 1
    for i in range(1, n + 1):
        tmp = before + after
        before = after
        after = tmp  # 可简化为before,after=after,tmp
    return tmp


def fbnq(n):
    a = 1
    b = 1
    for i in range(1, n):
      print(a)
      print(b)
      a = a + b
      b = a + b

高阶函数:函数的参数或返回值是函数的函数

def handle(func,*param):
    return func(*param)
def my_sum (*param):
    sum1 =0
    for i in range(len(param)-1):
        sum1 +=param[i]
    return sum1
print(my_sum(1,2,3,4,5))

函数的参数还是一个函数

print(handle(my_sum,1,2,3,4,5))
#reduce (func,inteable)函数 累计操作 func函数必须接受两个参数 reduce会把fubc的运行结果做一个参数,再
#从inteable中取一个数据作为另一个参数
from functools import reduce
li =[1,2,3,4,5,6]
result =reduce(lambda  x,y:x*y,li)
print(result)
#filter(func,inteable) 过滤 根据函数func来过滤inteable
#若函数返回TRUE 则保留  否则不保留该数据
li =[1,2,3,4,5,6]
result =list(filter(lambda x:x%2==1),li)
print(result)
#sorted(interable ,k
# key=None ,reverse=False)对数据进行排序 key可用来指定排序的规则 值是一个函数 reverse 用于指定升序还是降序
li =[1,4,68,-56]
#res =li.sort()#就地排序
re =sorted(li,key=abs)
#abs:绝对值排序
#list 自带的sort会影响原始数据 系统级的sorted函数不会影响原始数据
#print(res)
print(re)

打印注释内容

def ff():
    """
    fsff
    :return:
    """
    print('hello')
print(ff.__doc__)

模块

from food import make_bun,make_pizza
#import food 模块名
#from food import *
#from food import  as 别名  避免重名冲突
#模块就是一个文件 在编写程序时 ,可以把功能相似的代码放入一个模块中
#导入模块方法:1.from 模块名 import函数名
#2.import 模块名
#可以使用as为模块或函数起一个别名
make_bun()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容