美文网首页
day09、函数 2019-01-04

day09、函数 2019-01-04

作者: 绝世小丑 | 来源:发表于2019-01-04 18:00 被阅读0次

一、复习

0.列表(list)

[元素1, 元素2, 元素3···] [元素]
可变、有序
元素可以是任何数据类型,可以重复
元素的增删改查
相关运算和方法

1.元组(tuple)

(元素1, 元素2, 元素3···) 元素1, 元素2··· [元素]
不可变、有序
元素可以是任何数据类型,可以重复
获取元素的值
相关运算

2.字典(dict)

{key1: value, key2: value2```} {}
可变、无序
元素是键值对,键不可变且唯一,值可以是任何数据类型,可以重复
元素的增删改查
相关运算和方法

3.集合(set)

{元素1, 元素2, 元素3···} set()
可变,无序
元素不可变且唯一
元素的增删查;数学集合运算
相关运算

二、了解函数

打飞机游戏:
飞机的功能:左移、右移 上移、下移、发射子弹、爆炸···

print('左移')
print('右移')
print('上移')
print('下移')
print('发射子弹')
print('爆炸')

飞行过程:左移、右移、左移、左移

没有使用函数时,遇到的问题:
1.同样的代码要写很多事。
2.一旦功能发生改变,需要修改多处代码

解决方法:使用函数:



def zuo_yi():
    print('左移')
    print('看后视镜')
    print('向左打方向盘')
    print('踩油门')
    print('回正方向盘')


def you_yi():
    print('左移')
    print('看后视镜')
    print('向右打方向盘')
    print('踩油门')
    print('回正方向盘')


三、函数

1.什么是函数:

函数就是对实现某一功能的代码段的封装。

2.函数的分类:

系统函数:系统已经给我们定义好的函数,我们可以直接调用函数,使用函数的功能。
input(), print(), id(), id(), type(), chr(), bin(), max()...
自定义函数:需要我们自己去定义的函数。

3.自定义函数的规范:

a.语法:

def 函数名(参数列表):
函数体

b.说明:

def -----python中声明函数的关键字。
函数名 -----标识符,不能是关键字。
PEP8命名规范;见名知意(看到函数名就能大概知道函数的功能)。
() -----固定格式。
参数列表 -----参数1,参数2,参数3···;这里的参数叫形参;
定义的时候,形参就是变量;
功能是将函数外面的数据传递到函数里面。
: -----固定格式。
函数体 -----一个完整的函数体包含:
函数说明文档、实现函数功能的代码段、函数返回值。

c.初学者声明的函数的步骤:

第一步:确定函数的功能;
第二步:根据功能给函数命名;
第三步:确定参数(形参,确定需不需要参数,要几个);
看实现的功能需不需要从外表传值进来,要传几个。
第四步:实现函数的功能。
第五步:确定函数返回值

注意:函数在声明的时候是不会执行函数体的,只有在调用的时候才会执行。

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

a.语法:

函数名(实参列表)

b.说明:

函数名 -----这个函数名必须是已经声明过的函数。
() -----固定写法。
实参列表 -----用实参用来给形参赋值(用实参给形参赋值的过程加传参)
实参和形参要一一对应(数量、位置)。

c.函数的调用过程(重点。。。。。):

第一步:调用时,回到函数声明的位置。
第二步:用实参给形参赋值(传参)。
第三步:执行函数体。
第四步:执行完函数体后,确定并返回值,然后返回返回值。
第五步:回到函数调用的位置,接着执行后面的代码。

例如:写一个函数,功能为求两个数的和。



def new_sum(num1, num2):
    """
    求两数之和。                       -----函数功能说明
    :param num1:求和的第一个数        -----对参数 num1 进行说明
    :param num2:求和的第二个数        -----对参数 num2 进行说明
    :return: 无                       -----对返回值进行说明
                        -----说明不换行时 Ctrl + 鼠标指针 就都能看到所有提示
    """
    print('===========================')
    print(num1, '与', num2, '的两数之和为:', num1 + num2)


x = 1
y = 2
new_sum(x, y)               # 调用函数
new_sum(10, 20)


运行结果:

===========================
1 与 2 的两数之和为: 3
===========================
10 与 20 的两数之和为: 30

练习:

1.声明一个函数,打印指定的 n1



def jc(num1):
    """求 指定数 的阶乘。"""
    i = 1
    num2 = 1
    while i <= num1:
        num2 *= i
        i += 1
    print('%d 这个数的阶乘为:' % num1, num2)


n = int(input('请输入一个数:'))
jc(n)
jc(5)

运行结果:

请输入一个数:2
2 这个数的阶乘为: 2
5 这个数的阶乘为: 120

注意:一个函数可以使用多次

2.声明一个函数,打印指定列表中指定元素对应的下标



def xb(list1, item):
    """打印指定列表中指定元素对应的下标"""
    i = 0
    while i < len(list1):
        if list1[i] == item:
            print(item, '这个元素对应的下标为:', i)
        elif i == len(list1):
            print('指定列表内没有该元素')
        i += 1


list1 = ['a', 'b', 'c', 100]
xb(list1, 100)
xb([1, 2, 3, 'adc'], 3)

运行结果:

100 这个元素对应的下标为: 3
3 这个元素对应的下标为: 2

3.声明一个函数,功能为猜数字游戏:

随机产生一个 0 ~ 100 的数字,用户不断的输入数字,直到输入的数字和产生的数字一样,游戏就结束。
当猜错了,会给出大了或小了的提示。
产生随机数:

import random               # 导入 random 模块。
random.randint(0, 100)      # 产生一个 0 ~ 100 的随机整数。

解:



def csyx():
    """猜数游戏"""
    print('已经进入猜数游戏。')
    print('产生随机数中...')
    import random  # 导入 random 模块。
    num2 = random.randint(0, 100)  # 产生一个 0 ~ 100 的随机整数。
    print('产生完成。')
    num1 = int(input('请输入一个整数( 0 ~ 100 ):'))
    cs = 1
    while num1 != num2:
        cs += 1
        if num1 < num2:
            print('猜错了,稍微小了点。')
            num1 = int(input('请再次输入:'))
        elif num1 > num2:
            print('猜错了,稍微大了点。')
            num1 = int(input('请再次输入:'))
    print('恭喜你,猜对了。\n一共猜了 %d 次。\n奖励一个么么哒~~~\n游戏结束。' % cs)


csyx()

运行结果:

已经进入猜数游戏。
产生随机数中...
产生完成。
请输入一个整数( 0 ~ 100 ):50
猜错了,稍微小了点。
请再次输入:70
猜错了,稍微大了点。
请再次输入:60
猜错了,稍微小了点。
请再次输入:65
猜错了,稍微小了点。
请再次输入:68
猜错了,稍微小了点。
请再次输入:69
恭喜你,猜对了。
一共猜了 6 次。
奖励一个么么哒~~~
游戏结束。

四、参数

1.位置参数和关键字参数(根据实参的传递方式对参数进行的分类)

a.位置参数:

实参的位置和形参保持一致,按形参声明是先后顺序一一赋值

b.关键字参数:

调用函数的时候,以 形参 = 实参 的方式来传参,这个时候实参的顺序无所谓
例如



def func1(a, b, c):
    print(a, b, c)


# 通过位置参数给形参赋值
func1(10, 100, 1000)
# 通过关键字参数给形参赋值
func1(b=1000, c=100, a=10)
# 通过位置参数和关键字参数结合传参(注意:关键字参数必须在位置参数的后面)
func1(10, 100, c=1000)

运行结果:

10 100 1000
10 1000 100
10 100 1000

2.参数默认值

声明函数的时候,可以给参数赋默认值。
如果一个形参有默认值了,那么调用函数的时候,这个参数就可以不用传参。
如果有的形参有默认值,有的形参没有默认值,那么有默认值的参数,要放在没有默认值的形参的后面。
例如



# 参数 b、c 有默认值,在调用函数的时候 b、c 就可以不用传参。
def func2(a, b=None, c=0):
    print(a, b, c)


func2(10)

运行结果:

10 None 0

3.参数的类型说明(这里面的类型说明没有提示功能,没有约束功能)

a.给参数设置默认值,默认值的类型,就是参数的类型
b.在形参后面加 : 类型名 ,来说明参数类型。这种方式调用的时候必须传参。
c.函数声明的时候在 () 后面加 ->类型名 ,来说明函数返回值的类型

类型说明后的好处:
a.对实参的类型进行指导。
b.实现函数功能的时候,有类型相关的语法提示。
例如:



def func3(a, list1: list, b=None)->int:
    list1.append()              # 说明类型后,就会有提示。
    print(a, b, list1)


4.不定长参数(参数个数不确定)

a.在参数名前面加 * ,可以用来同时获取多个实参的值。

实质是将带 * 的参数编程元组,将多个实参的值作为元组的元素。

b.在参数名前面加 ** ,

会将这个参数变成一个字典,来获取关键字参数的值,其它关键字作为 key ,实参作为 value 。

注意:
a.如果函数中既有不定长参数又有普通参数,不定长参数要放在普通参数之前。
b.使用不定长参数时, ** 定义的长参数要放在 * 定义的长参数之后。

例如:

def func4(*nums):
    print(nums)


func4(1)
func4(1, 2)
func4(1, 2, 3)


# 加 * 的用法,不定长参数要放在不带 * 的参数之前。
def func5(name, *nums):
    print(name, nums)


func4(1)
func4(1, 2)
func4(1, 2, 3)


def func6(**nums):
    print(nums)


func6(a=10)
func6(a=10, b=20)


# 既有 * 定义的长参数,又有 ** 定义的长参数,在使用的时候更灵活。
def func7(*name, **nums):
    print(name, nums)


func7(1, 2, 3)
func7(a=10, b=20)
func7(1, 2, 3, a=10, b=20, c=30)

运行结果:

(1,)
(1, 2)
(1, 2, 3)
(1,)
(1, 2)
(1, 2, 3)
{'a': 10}
{'a': 10, 'b': 20}
(1, 2, 3) {}
() {'a': 10, 'b': 20}
(1, 2, 3) {'a': 10, 'b': 20, 'c': 30}

练习:写一个函数,计算多个数的和(要求可以使用位置参数也可以使用关键字参数)

def dgsdh(*tuple1, **dict1):
    """算多个数的和。"""
    i = 0
    k = 0
    sum1 = 0
    while i < len(tuple1):
        sum1 += int(tuple1[i])
        i += 1
    for j in dict1:
        x = dict1[j]
        sum1 += x
        k += 1
    num1 = i + k
    print('一共有 %d 个数字,' % num1, '和为:', sum1)


dgsdh(1, 2, 3, a=4, b=5)

运行结果:

一共有 5 个数字, 和为: 15

五、返回值

1.什么是返回值 -----就是将函数里面的数据传递到外面

a.返回值就是函数体中,调用表达式的值,就是 return 关键字后面表达式的值。
b.python中每个函数都有返回值,默认是None。

函数调用表达式 -----调用函数的语句。
return -----关键字,只能写在函数体中。功能:1.确定函数的返回值;2.结束函数。
执行函数的时候,如果遇到 return ,函数就直接结束,
并且将 return 后面的值作为函数的返回值。

函数的调用过程:
1).回到函数声明的位置
2).传参 -----保证每个参数都有返回值
3).执行函数体
4).执行完函数确定返回值 -----如果执行过程中,没有遇到 return ,函数的返回值就为 None;
若遇到 return ,函数的返回值就为 return 后面的东西。
5).回到函数调用的位置(这个时候,函数调用表达式的值,就是函数的返回值)
例如



def func1():
    print('*****')
    return True
    print('=====')


result = func1()             # func1()就是函数调用表达式
print(result)

运行结果:

*****

2.多个返回值

return 值1, 值2, 值3··· -----相当于返回一个元组。
例如:



def func2():
    return 1, 2, 3


x, y, z = func2()
print(x, y, z)

运行结果:

1 2 3

3.怎么确定函数是否需要返回值

如果函数的功能要拿到新的数据,就将这个数据用 return 返回。

相关文章

  • day09、函数 2019-01-04

    一、复习 0.列表(list) [元素1, 元素2, 元素3···] [元素]可变、有序元素可以...

  • Day09函数基础

    1.recode 列表,字典,元祖,集合 列表(list): [];可变,有序;元素是任何类型的数据增:appen...

  • day09 函数(1)

    函数(Function) 什么是函数函数就是对实现某一特定功能的代码段的封装 函数的分类 系统函数:系统已经给我们...

  • day09、作业 2019-01-04

    1. 编写⼀个函数,求1+2+3+...+N 解: 运行结果: 2. 编写⼀个函数,求多个数中的最⼤值 解: 运行...

  • 认识函数

    DAY09 认识函数,基本用法和进阶用法 【回顾目标】 001、制定今天的学习计划 002、完成一字群的作业 00...

  • 自律给我自由—Day009

    【叶子姑娘的自律100天挑战 Day09】 2019.01.23 Day09/100 【早起】第十二天早起。 【阅...

  • Day09 函数与公式

    认识函数 一、基本用法 公式:是EXCEL工作表中进行数值计算的等式,公式输入是以“=”开始的,简单的公式有加、减...

  • Day09学习总结-函数

    1.什么是函数 函数就是对实现某一特定功能的代码段的封装 2.函数的分类 系统函数:系统已经给我们定义好的函数,程...

  • 2019-01-04

    2019-01-04桓台台姜博士眼镜商迎新 2019-01-04 桓台姜博士眼镜商迎新 姜博士眼镜商迎新。大家好!...

  • 三阶段day09-前后分离、ajax

    day09: 前后分离,ajax 前后分离 ajax

网友评论

      本文标题:day09、函数 2019-01-04

      本文链接:https://www.haomeiwen.com/subject/bmphrqtx.html