day9Function

列表(list)

[元素1,元素2...]
可变,有序
元素可以是任意类型的数据,可以重复
元素的增删改查

元祖(tuple)

(元素1,元素2...) 元素1,元素2... (元素1,)
不可变,有序
元素可以是任意类型的数据,可以重复
获取元素

字典(dict)

{'key1':value1,'key2':value2,....} {}
可变,无序
元素是键值对;键 不可变,唯一;值 可以是任意类型的数据,可以重复
元素的增删改查

集合(set)

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

Function

  1. 什么是函数
    函数就是实现某一特定功能的代码段的封装

  2. 函数的分类
    系统函数:系统已经给我们定义好的函数,程序员直接调用函数,使用功能。
    自定义函数:需要程序员自己去定义的函数

  3. 函数的定义:(声明函数)
    a. 语法
    def 函数名(参数列表):
    函数体

b. 说明
def - Python中声明函数的关键字

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

c. 初学者声明函数的步骤
第一步:确定函数的功能
第二部:根据函数的功能确定函数名
第三部:确定形参(确定需不需要参数,确定需要几个参数)
看实现函数的功能需不需要从函数外边传值进来?需要传几个
第四部:实现函数的功能
第五步:确定函数返回值

(重点!!!)注意:声明函数的时候不会执行函数体!只有在调用的时候才会执行

4. 函数的调用

a. 语法

函数名(实参列表)

b. 说明
函数名 - 这个函数名对应的函数名必须是已经声明过的函数
() - 固定写法
实参列表 - 实参是给形参赋值的(用实参给形参赋值的过程叫 传参)
实参和形参要一一对应
c. 函数的调用过程(重点!!!)
第一步:回到函数声明的位置
第二步:使用实参给形参赋值(传参)
第三步:执行函数体
第四步:执行完函数体就确定并返回返回值
第五步:再回到函数调用的位置,接着执行后面的其他代码

写一个函数,求两个数的和
def yj_sum (num1,num2):

求两个数的和(函数功能说明)num1: 求和的第一个数num2: 求和的第二个数:return: 无(函数返回值说明)

print(num1+num2)
调用函数
yj_sum(1,2)
print('====')
练习:声明一个函数,打印指定的 n!
def yj(n):
    """求指定数的阶乘"""
    sum1 = 1
    for x in range(1,n+1):
        sum1 *= x
    print('%d的阶乘是:%d' % (n,sum1))

yj(5)
yj(10)
练习:声明一个函数,打印指定列表中指定元素对应的下标
def list_index(list1, item):
    """打印指定列表(list1)中指定元素(item)对应的下标"""
    count = 0  # 保存指定列表中指定元素的个数
    for index in range(len(list1)) :
        if list1[index] == item:
            print(index)
            count += 1
    if count == 0:
        print('列表中没有指定元素')


list_index([1,2,3,3,1,2,3],3)
练习:声明一个函数,函数功能是猜数字游戏:随机产生一个0-100数字,直到输入的数字和产生数字一样游戏结束当猜错了, 可以给出‘大了’/ ‘小了’ 这样的显示
导入random模块
import  random
randint(m,n)  产生一个m到n的随机整数
num = random.randint(0,10)
 print(num)
def yi_random():
    # print(num)
    num = random.randint(0,100)
    while True:
        num1 = int(input('输入数字:'))
        if num1 == num:
            print('游戏结束')
            break
        else:
            if num1 < num:
                print('小了')
            else:
                print('大了')

yi_random()

参数

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

a. 位置参数:实参的位置和形参位置保持一致,按位置先后顺序一一赋值
b.关键字参数:掉用函数的时候以 形参 = 实参 的方式来传参,这个时候实参的顺序无所谓 (特殊情况使用)

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

通过位置参数进行传参

func1(10,20,30)

通过关键字参数传参

func1(a=10,b=20,c=30)

通过位置和关键字传参结合(关键字参数在位置参数后面)

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

调用函数要保证每个参数都有值!

参数默认值 有默认值的放在默认值的后面!!!

def func(a,b,c=20):
    print(a,b,c)

func(10,32)
func(100,200,300)

  1. 参数的类型说明 - 类型说明只有提示的功能,没有约束功能
    a.给参数设置默认值,默认值的类型就是参数的类型
    b. 在形参的后面加 :类型名,来说明参数类型。这种方式调用的时候必须传参;
    c. 括号后面加 ->类型名,来说明函数返回值的类型

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

def list_item(list1:list,index:[]) ->int:
    print(list1[index])

4.不定长参数 - 函数的参数个数不确定
a.在声明函数的时候,在参数名前加,可以用来同时获取多个实参的值
-- 实质是将带
的参数编程元祖,将多个实参的值作为元祖的元素

注意:如果有普通参数,不定长参数必须放在普通参数的后面

写一个函数,计算多个数的和

def yj_sum(name,*nums):
    print(name,nums)

b. 在参数名前加两个* 会将这个参数变成一个字典来获取关键字参数的值,其他关键字作为key,实参作为value
两个的要放在一个的后面

def func3(**nums):
    print(nums)

func3(a=10,b=20)

def func3(*args,**nums):
    print(args,nums)
func3(10,20,30,52)
func3(a=25,b=32,c=52)
func3(25,32,a=25,b=63)

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

def yj_sum(*nums:int):
    nums = sum(nums)
    print(nums)
yj_sum(1,2,3,4,5)

你可能感兴趣的:(day9Function)