函数
函数的定义
del 函数名([参数]):
"""
函数
del 函数名([参数]):
pass
函数如果不调用,无法获得结果
"""
def hello_world():
print("hello world")
pass
def hello_world_cnt(print_cnt):
cnt = 0
while cnt < print_cnt:
print("hello world")
cnt += 1
pass
# hello_world()
# hello world
hello_world_cnt(3)
# hello world
# hello world
# hello world
形参与实参的定义与区别
形参:形式参数,写在函数后面的参数列表里的参数
实参:实际参数,实际调用函数时,传递的参数
函数的返回值是什么
默认返回None,可使用return自定义返回值
pass语句是什么
空语句,无实义
匿名函数的语法是什么
lambda 变量: 变量操作
"""
函数返回值
求两个数的和
"""
def add(a, b):
"""
:param a: 被加数
:param b: 加数
:return: 和
"""
return a + b
print(add(1, 2))
# 3
# 方式2
# 匿名函数
# add = lambda a, b: a + b
# print(add(2, 4))
# 6
函数参数传参方式有哪些
- 必需参数
- 关键字参数
- 默认参数
- 只能指向不可变对象
可变参数的语法是什么
形参前面加一个*
"""
定义一个方法,传入两个参数,一个是多个货物的价格,一个是类型的折扣,返回货物总价格
"""
def sale_price(cut_off, *goods_prices):
return sum(goods_prices) * cut_off
# print(sale_price(0.5, 1.0, 2.0, 3.0, 4.0))
# 5.0
prices = (1.0, 2.0, 3.0, 4.0)
# sale_price(0.5, prices)
# TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
print(sale_price(0.5, *prices))
# 5.0
可变参数以什么数据类型传参
可变参数
- *arg
数据以元组的形式传入
- **kwargs
数据以字典的形式传入
- 解包运算符*
列表/元组传入可变参数的语法是什么
使用解包运算符*
"""
打印学生信息
"""
def printInfo(**dic):
print(f'姓名:{dic["name"]} 年龄:{dic["age"]} 性别:{dic["sex"]} 爱好:{dic["hobby"]}')
dic = {'name': 'Anna', 'age': 18, 'sex': '女', 'hobby': '阅读'}
# 解包
printInfo(**dic)
# 姓名:Anna 年龄:18 性别:女 爱好:阅读
存储函数多个返回值的方式有什么
- 单个变量存储返回值
- 以元组的形式存储返回值
"""
对x, y求和、减运算
"""
def add_and_sub(a, b):
return a + b, a - b
# total, sub = add_and_sub(1, 2)
# print(total, sub)
# 3 -1
rst = add_and_sub(1, 2)
print(type(rst))
# <class 'tuple'>
print(rst)
# (3, -1)
函数返回多个值的数据类型是什么
以元组的形式返回多个值
变量作用域
- 局部变量,如函数内的变量,作用域在函数外无法使用
- 全局变量,可以在任何代码块里使用
局部变量和全局变量重名,单独对局部变量进行操作运算,不影响全局变量的值。可使用global名声局部变量,则会修改全局变量的值
"""
全局变量
局部变量
global关键字
"""
# num = 1
#
# def update_num():
# num = 2
# print(f'num = {num}')
#
# print(num)
# # 1
# update_num()
# # num = 2
num = 1
def update_num():
global num
num = 2
print(f'num = {num}')
print(num)
# 1
update_num()
# num = 2
print(num)
# 2
设定可选参数的方式有哪些
- 参数设定为可变参数
- 参数可设有默认值
类和对象
面向对象的三大特征有什么
- 封装
- 继承
- 多态
什么是类
可以理解为模板
例如:动物–>猫科动物–>猫类–>中华田园猫
类的定义是什么
class 类名
对象方法的定义和函数的区别是什么
什么是对象
万物皆对象
一个具体的实例
例如:隔壁大爷家的橘猫
类和对象的关系是什么
类是抽象出来的模板,对象是具体的实例
例如:类是中华田园猫,对象是隔壁大爷家的橘猫
访问对象成员的语法是什么
使用.
访问对象成员
对象的初始化方法__init__()
什么时候被调用
当对象被创建的时候,就会调用对象的初始化方法
例如:cat = Cat()
对象的初始化方法__init__()
的语法是什么
class Cat:
def __init__(self):
pass
__str__()
是什么
使用print输出变量时的输出内容
class Cat:
def __init__(self, name):
self.name = name
def __str__(self):
return f'name:{self.name}'
cat = Cat('Tom')
print(cat)
# name:Tom
设定私有属性的语法是什么
属性名前加两个连续的下划线
写get方法访问私有属性
class Cat:
def __init__(self, name, age):
self.name = name
self.__age = age
def get_age(self):
return self.__age
def __str__(self):
return f'name:{self.name}'
cat = Cat('Tom', 2)
print(cat.get_age())
# 2
什么是继承
一个模板类在原有属性的基础上,增加了一些新的属性
可以使用继承,以避免写重复代码
如何定义父类子类
class 类名1:
class 类名2(类名1):
则:类2继承于类1
子类如何复写父类方法
子类继承后,使用父类方法名,写新的代码
子类调用父类属性的语法是什么
使用super调用
类属性如何调用
类名或对象名使用.
调用
类属性和对象属性的区别是什么
对象属性依赖于对象,类属性,可直接使用类名调用
模块导入
模块导入的方式是什么
使用import导入模块
通过判断__name__
来控制输出
"""
两个不同的文件,a,b
a文件使用b中的代码,使用模块导入
在a文件中添加:
import b
if __name__ == '__main__': xxx
如果b文件有输出信息,可添加__name__ == '__main__'判断输出
"""
from sort import NewList
nums = NewList()
nums.append(4)
nums.append(9)
nums.append(2)
nums.append(7)
# nums.sort()
# print(nums)
# [2, 4, 7, 9]
nums.sort(reverse=True)
print(nums)
# [9, 7, 4, 2]