'''
1. Python的基本数据类型有哪些?哪些是可变和不可变的基本数据类型
基本数据类型:==》六大基本数据类型
Number数字型 ==》int、float
String字符型
Tuple元组
List列表
Dict字典
Set集合
布尔型
可变的基本数据类型:在定义好之后里面的元素还可以发生变化的==》列表、字典、集合
不可变的基本数据类型:==》数字型、字符型、元组
数据结构==》元组、列表、字典、集合
2. Python中元组,列表,字典怎么创建,有什么区别?
1) 元组是以小括号()定义的,元组是不可变的基本数据类型
2) 列表是以中括号[]定义的,列表是可变的基本数据类型,里面有很多的函数比如append、extend、insert
3)字典是以大括号{}定义的,字典是可变的基本数据类型,里面的数据是以key:vaule键值对的格式显示的
4)元组的处理速度会比列表快,安全性比列表也要高
5)元组可以作为字典的键,列表不可以
3. Python怎么自定义函数
通过def关键字定义
4. 类和对象中都有哪些变量和方法?
'''
# # 创建元组
# tuple1 = (1,2,3,"dcs56")
#
# # 创建列表
# list1 = [1,2,3,"dcs56"]
#
# # 创建字典
# dict1 = {"name":"zhangsan","age":18}
# Python自定义函数
# def func1(): # ()里面是参数列表
# print("这是一个自定义函数")
#
#
# # 调用函数的第一种方式
# # func1()
#
# # 调用函数的第二种方式
# if __name__ == '__main__': # name是指当前的模块名,main是指当前被运行的模块名
# func1() # main的作用:main函数是主函数,只能在当前模块里面被调用,是为了防止其他模块调用
# 单个参数
# def func2(name): # name称为形式参数(形参)
# print(name+",你好")
#
# func2("张三") # 张三称为实际参数(实参)
# 多个参数
# def func3(name,sex): # name,sex称为形式参数(形参)
# print("姓名:"+name+",性别:"+sex)
#
# func3("张三","男") # "张三","男"称为实际参数(实参)
# 默认值参数
# def func4(name,age="18"): # age="18"称为默认参数
# print(name,age)
#
# func4("张三","20")
'''
单个参数 ==》参数列表当中如果只有1个形参,那么就需要传1个实参
多个参数 ==》有3个形式参数,就必须要传3个实际参数,不然执行会报错
默认参数 ==》当有形式参数和默认参数的时候,默认参数放在形式参数的后面,默认参数如果不传参,就是使用默认值,如果传入实参原有的默认值就会被覆盖
可变长元组 ==》在接收实际参数的时候需要在参数列表前面输入一个*号
可变长字典 ==》在接收实际参数的时候需要在参数列表前面输入两个*号
同时存在可变长元组和可变长字典的时候 ==》可变长字典要在最后面
'''
# 类和对象中都有哪些变量和方法
'''
类的概念:描述具有相同属性和行为的对象的集合
类是一个泛指,一个模板 ==》人类
属性:在Python里面叫变量 ==》1个脑袋,2只眼睛
行为:在Python里面叫方法 ==》吃饭、睡觉、打游戏
对象:是一个实际存在的例子 ==》张三
对象是根据类创建的,创建对象的过程可以称为实例化,创建出来的对象可以称为实例
类的所有属性和方法都是对象的==》体现在对象可以直接调用类方法和类变量
'''
# 类分为新式类和经典类
# class People1(object): # ==》新式类
# class People2: #==》经典类
class People:
head = 1 # 这是一个类变量
def __init__(self,name,age): # 这是一个构造方法
self.name = name # self.name就是实例变量,实例变量是绑定在对象身上的,name,age就是形式参数
self.__age = age # self.__age就是私有变量 ==》私有变量只能在类的内部调用,外部不能调用
def play(self):
'''
这是一个实例方法,绑定在对象身上的,可以通过self在实例方法中自由传递
带有self的都是实例方法,self.name这种实例变量在实例方法中是可以直接引用的
:return:
'''
print(self.name+"喜欢打游戏")
# 这个@符号称为装饰器
# 装饰器的作用:在不改变原有方法或函数的功能的基础上,为其增加新的功能
# 常见的装饰器有:@classmethod、@staticmethod、@data、@ddt、@unpack、@property
@classmethod
def func1(cls):
# 类方法是绑定在类身上的,可以通过cls在类方法中自由传递
print("我是一个类方法")
@staticmethod
def func2():
print("我是一个静态方法")
@property
def func3(self):
print("这是一个可以把函数变为属性的装饰器")
def __func4(self): # 私有方法前面会加双下划线,私有方法只能在类的内部调用
print("我是一个私有方法")
def func5(self):
# 单独定义一个实例方法,把__func4()这个私有方法的结果返回回去 ==》这里体现了Python里面的三大特性之一:封装
# Python的三大特性:封装、继承、多态
return self.__func4()
def func6(self):
# 单独定义一个实例方法,把self.__age这个私有变量的结果返回回去 ==》这里体现了Python里面的三大特性之一:封装
return self.__age
p1 = People("张三",18) # P1就是根据类创建出来的对象,People就是类,People()匿名对象,张三就是实际参数
# p1.play() # 对象调用实例方法
# 类和对象调用实例方法、类方法、静态方法、私有方法
# People.play(p1) # 类调用实例方法,注意必须要传一个对象
# p1.play() # 对象调用实例方法
# People.func1() # 类调用类方法
# p1.func1() # 对象调用类方法
# People.func2() # 类调用静态方法
# p1.func2() # 对象调用静态方法
# People.func5(p1) # 类调用私有方法(实际调用的还是实例方法)
# p1.func5() # 对象调用私有方法(实际调用的还是实例方法)
# 类和对象调用类变量、实例变量、私有变量
# print(People.head) # 类调用类变量
# print(p1.head) # 对象调用类变量
# print(People.name) # 类调用实例变量会报错,AttributeError: type object 'People' has no attribute 'name'
print(p1.name) # 对象调用实例变量
print(People.func6(p1)) # 类调用私有变量(实际调用的还是实例方法)
print(p1.func6()) # 对象调用私有变量