列表(list)
[元素1,元素2...]
可变,有序
元素可以是任意类型的数据,可以重复
元素的增删改查
元祖(tuple)
(元素1,元素2...) 元素1,元素2... (元素1,)
不可变,有序
元素可以是任意类型的数据,可以重复
获取元素
字典(dict)
{'key1':value1,'key2':value2,....} {}
可变,无序
元素是键值对;键 不可变,唯一;值 可以是任意类型的数据,可以重复
元素的增删改查
集合(set)
{元素1,元素2...} set()
可变,无序
元素不可变 唯一
元素的增删查;数学集合运算
Function
什么是函数
函数就是实现某一特定功能的代码段的封装函数的分类
系统函数:系统已经给我们定义好的函数,程序员直接调用函数,使用功能。
自定义函数:需要程序员自己去定义的函数函数的定义:(声明函数)
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)
通过位置和关键字传参结合(关键字参数在位置参数后面)
- 参数默认值
声明函数的时候,可以给参数赋默认值。
如果一个形参有默认值,那么调用函数的时候,这个参数就可以不用传参了
注意:有形参的默认值要放在没有默认值形参的后面*
调用函数要保证每个参数都有值!
参数默认值 有默认值的放在默认值的后面!!!
def func(a,b,c=20):
print(a,b,c)
func(10,32)
func(100,200,300)
- 参数的类型说明 - 类型说明只有提示的功能,没有约束功能
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)