day 10 总结

不使用函数有什么问题:

  1. 同样的代码需要写多次(冗余)
  2. 功能发生改变的时候需要修改多出代码

一、函数

1.什么是函数

函数就是对实现某一特定功能的代码块的封装

2.函数的分类

1)系统函数(内置函数) - 系统已经实现的函数(已经造好的机器),程序员只需要调用就行

print函数、input函数、len函数、sum函数、max函数等

2)自定义函数:程序员自己声明的函数(自己造机器)

3.函数的声明(定义) - 造机器

1)语法:

def 函数名(形参列表):
函数说明文档
函数体

2)说明

def - python 声明函数的关键字
函数名 - 和变量名要求一样
见名知义(看见函数名大概知道函数的功能)
() - 固定写法
形参列表 - 变量名1,变量名2,变量名3...(根据情况变量名的个数可以是0个、1个或者多个)
形参的作用是将函数外面的数据传递到函数的里面
: - 固定写法
函数体 - 和def保持一个缩进的一条或者多条语句。(实现函数功能的代码块)

3)初学者声明函数的步骤

第一步:确定函数的功能
第二步:根据功能确定函数名
第三步:确定形参,(看实现函数的功能需不需要从外面传值,如果需要传值需要几个)
第四步:实现函数的功能
第五步:执行完函数体,确定函数返回值

(!!!!)注意:函数声明的时候,函数体不会执行!

写一个函数来求两个数的和

def sum1(num1, num2):

   """
    函数说明文档(功能说明)
    :param num1: 参数说明
    :param num2: 参数说明
    :return: 返回值说明
   """
   print('求和')
   print(num1 + num2)

声明一个函数,实现求1+2+3+..n的功能


def sum2(n):
  """
  1+2+3+...+n
  :param n: 个数
  :return: 和
"""
  num4 = 0
  for x in range(1,n):
      num4 += x
  print(num4)

4.函数的调用 - 使用机器

1)语法:

函数名(实参列表)

2)说明

函数名 - 已经声明过的函数
() - 固定写法
实参列表 - 数据1,数据2,数据3,...(实参是用来给形参赋值的)

3)函数的调用过程(特别重要!!!)

第一步:先回到函数声明的位置
第二步:用实参给形参赋值。(这个过程又叫传参,传参要保证每个形参都有值)
第三步:执行函数体
第四步:获取返回值
执行完函数体:函数体执行完、执行过程中遇到return
确定函数返回值:看执行函数过程中有没有遇到return,如果遇到了return后面表达式的值就是函数的返回值
如果没有return,函数的返回值就是None
第五步:回到函数调用的位置,接着往后执行(这个时候函数调用表达式的值就是函数的返回值)
sum1(15, 18)
sum2(99999)
同一个函数可以调用多次

二、参数

1.位置参数和关键字参数

调用函数的时候根据形参的写法分为位置参数和关键字参数
1)位置参数:让实参的顺序和形象一一对应,中间用逗号隔开
2)关键字参数:以‘形参名1 = 值1,形参名2 = 值2...’格式来确定形参

注意:如果既有位置参数,又有关键字参数,位置参数必须在关键字参数的前面

def func1(a, b, c):
  # a = 10 , b = 20 , c = 30
  print('a', a, 'b', b, 'c', c)
# 位置参数
func1(10, 20, 30)
# 关键字参数
func1(c=30, b=20, a=10)
# 位置参数+关键字参数
func1(10, c=30, b=20)

2.参数默认值

声明函数的时候,可以给形参赋默认值。有默认值的形参,给这个形参赋值
注意:声明的时候有默认值的参数要放在没有默认值的参数后面


def func2(a, b=20, c=30):
    print(a, b, c)


func2(100, 200)
func2(100, 200, 300)

# 调用函数只给a和c赋值,b使用默认值
func2(a=100, c=300)
func2(100, c=300)

3.参数的类型说明

python中类型只有说明的作用,没有约束的作用
1)参数赋默认值
2)参数名:类型

def func3(a=0, b=''):
    print(a, b)

func3(1, 100)

4.不定长参数

写一个函数,求多个数的和

1)声明函数的时候,在形参的前面加*,那么这个参数就变成了不定长参数,可以同时接收多个实参(将这个参数变成元祖)
2)声明函数的时候,在形参的前面加**,那么这个参数也会变成不定长参数,可以同时接收多个关键字实参(将这个参数变成字典)

注意:不带的参数要放在带参数的前面

def sum1(*nums):
    print(nums)

sum1()
sum1(1)
sum1(23, 12)
sum1(21, 431, 32)
sum1(12, 32, 11, 23, 221, 21)

练习:写一个函数,按指定的方式计算多个数字的结果
operation('+', 23, 34, 45, 56) ->求和
operation('-', 23, 34, 45, 56) ->求和
operation('*', 23, 34, 45, 56) ->求和
operation('/', 23, 34, 45, 56) ->求和

def operation(total1 , *nums:int):
    ops = {"+": (lambda x, y: x + y), "-": (lambda x, y: x - y), "*":(lambda x, y: x * y), '/':(lambda x, y: x / y)
    if total1 == '+' or '-':
        n = 0
        for index in range(len(nums)):
            n = ops[total1](n,nums[index])
        print(nums[index-1])
    elif total1 == '*' or '/':
        n = 1
            for index in range(len(nums)):
                n = ops[total1](nums[index],n)
            print(nums[index-1])
operation('*',1,2,3,4)


def func5(aa,**nums):
    print('===================')
    print(nums)

func5(aa=100,a=10, b=20, c=30, name='lizhuoran')


def func6(*args, **kwargs):
    print('===================')
    print(args,kwargs)


func6(12,123,111,a=112,b=233,c=223)

三、返回值

1.什么是函数的返回值

返回值就是return关键字后面表达式的值,就是函数调用表达式的值

1)return

return是函数体中的关键字(只能出现在函数体中)
作用:结束函数,确定函数返回值

def func1():
    print('======')
    print('aaaaaa')
    # return     # 提前结束函数
    print('hello')
    return 100   # 确定函数返回值

func1()

2,什么时候需要返回值(初学者)

指导思想:如果实现函数的功能会产生新的数据,就可以把这个数据作为函数的返回值

return 返回值1,返回值...

def sum1(num1, num2):
    return num1 + num2 ,(num2 + num1)/2

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

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,729评论 0 38
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,731评论 2 9
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,521评论 0 5
  • 函数只定义一次,但可能被执行或调用任意次。JS函数是参数化的,函数的定义会包括一个称为形参的标识符列表,这些参数在...
    PySong阅读 514评论 0 0
  • 函数只定义一次,但可能被执行或调用任意次。JS函数是参数化的,函数的定义会包括一个称为形参的标识符列表,这些参数在...
    PySong阅读 843评论 0 0