1 函数
1.1 定义函数
#def 关键字定义函数,user_name函数名;如果需要传递参数就传递参数,如果不需要括号为空,最后以冒号结尾(英文形式)
def user_name():
# 函数功能实现
name = input("please input a name:")
print("Hello,"+ name)
# 调用函数
user_name()
输出:
please input a name:张三
Hello,张三
1.2 传递参数
1.2.1 位置参数
位置参数中要求实参和形参位置要一致,如下:
def user(user_name,user_type):
print(user_name + " is a " + user_type)
user('LLC','Boy')
输出:
LLC is a Boy
这里如果将’LLC’和’Boy’两个参数反着放,那么结果就变成:
Boy is a LLC
1.2.2 关键字参数
关键字实 是传递给函数的名称—值对。你直接在实参中将名称和值关联起来了,因此向函数传递实参时不会混淆。如下:
def user(user_name,user_type):
print(user_name + " is a " + user_type)
user(user_type='Boy',user_name='LLC')
输出:
LLC is a Boy
这里即使参数位置发生了变化,输出结果也是跟预期的一样
1.2.3 默认值
给形参制定默认值,在传递参数的时候,如果有形参就用形参值,如果没有就用默认值。
def user(user_type,user_name='LLC'):
print(user_name + " is a " + user_type)
user(user_type='Boy')
输出:
LLC is a Boy
注意:
在形参中必须先列出没有默认的形参,再列出有默认值的实参。
1.3 返回类型
对于函数的返回值是多样的,可以是简单的字符串,也可以值字典。函数就相当一个加工厂,参数就相当于一些原材料,返回值就是最后这个加工厂的产品,根据实际的要求,生产出不一样的产品。
1.4 传递任意数量的实参
有时候,你预先不知道函数需要接受多少个实参,Python允许函数从调用语句中收集任意数量的实参。
这里*形参名表示创建一个空元祖,将收到的所有值都封装到这个元组中。如下:
def user_name(*users):
for user in users:
print(user)
user_name("张三","李四","网二")
输出:
张三
李四
网二
如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。Python先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中。如下:
def user_name(numbers,*users):
print("下面是"+str(numbers)+"个人的姓名:")
for user in users:
print(user)
user_name(3,"张三","李四","网二")
输出:
下面是3个人的姓名:
张三
李四
网二
**形参名创建一个空字典,并将收到的所有名称—值对都封装到这个字典中,如下:
def user_name(first,last,**user_info):
profile = {}
profile['first_name'] = first
profile['last_name'] = last
for key,value in user_info.items():
profile[key] = value
return profile
user_profile = user_name("小刘","小张",second_name="小王",third_name="小红")
print(user_profile)
这里注意实参的写法,尤其是对后两个传递给形参字典的写法:键="值"
1.5 将函数存储在模块中
将函数存储在模块中,再通过模块导入到主程序中,或者其他程序中。
(1)导入整个模块
先创建一个模块,模块的扩展名为.py文件,包含要导入程序中的代码。
用法:
import 模块名
细节:
这就相当于把整个模块中的所有程序都赋值到这里;要调用模块中的函数,制定模块的名称和函数名,用.分隔他们
(2)导入特定函数
用法:
from 模块名 import 函数名1,函数名1,函数名1
(3)使用as给函数指定别名
用法:
from 函数名 import 函数名 as 别名
(4)使用as 给模块指定别名
用法:
import 模块名 as 别名
(5)导入模块中的所有函数
用法:
from 模块名 import *
2 类
2.1 创建和使用类
# 约定:首字母大写的名称指的是类
# 这个类定义中的括号是空的,因为从空白创建这个类,在后面我将学校继承这时候这个括号就不再是空的
class People():
# 类中的函数称为方法,下面这个__init__是一个特殊的方法,每当创建实例时,Python将自动运行它。
# 开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突
# 形参self必不可少,还必须位于其他形参的前面
# 为何必须在方法定义中包含形参self 呢?
# 因为Python调用这个__init__()方法来创建Dog实例时,将自动传入实参self。每个与类相关联的方法
# 调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。
# 它是一个指向实例本身的引用,让实例能够访问类中的属性和方法
# 传递参数时,self是自动传递,只需给出后面的参数即可
def __init__(self, name, age):
# 获取存储在形参name中的值,并将其存储到变量name中,然后该变量被关联到当前创建的实例
# 通过实例访问的变量称为属性
self.name = name
self.age = age
# 只有一个形参self。后面将创建的实例能够访问这些方法
def sit(self):
print(self.name + "在写作业!")
print(self.name + "已经有" + str(self.age) + "岁了。")
# 约定:首字母大写是名称指的是类,而小写的名称指的类创建的实例
# 方法__init__()并未显式地包含return语句,但Python自动返回一个表示的实例
people = People('隔壁老王',8)
# 访问属性
print(people.age)
# 调用方法
people.sit()
输出:
8
隔壁老王在写作业!
隔壁老王已经有8岁了。
2.2 修改类中的属性
(1)直接修改属性的值
(2)通过方法修改属性的值
如下:
class People():
def __init__(self, name, age):
self.name = name
self.age = age
def sit(self):
# 通过方法修改属性的值
self.age = 30;
print(self.age)
print(self.name + "在写作业!")
print(self.name + "已经有" + str(self.age) + "岁了。")
people = People('隔壁老王',8)
print(people.age)
# 直接修改属性的值
people.age = 20;
print(people.age)
people.sit()
输出:
8
20
30
隔壁老王在写作业!
隔壁老王已经有30岁了。
2.3 继承
一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类,而新类称为子类。子类继承了其父类的所有属性和方法,同时还可以定义自己的属性和方法。
class People():
def __init__(self,name,type):
self.name = name
self.type = type
def get_information(self):
print(self.name + "是一个" + self.type)
# 创建子类时,父类必须包含在当前文件中,且位于子类前面。
class Active():
def __init__(self,active):
self.active = active
class Man(People):
# 定义子类时,必须在括号内指定父类的名称。方法__init__()接受创建Car实例所需的信息
def __init__(self,name,type):
# super()是一个特殊函数,帮助Python将父类和子类关联起来,父类也称为超类
super().__init__(name,type)
# 给子类定义属性
self.year = 20
# 将实例用作属性
self.act = Active('act-tion')
#给子类定义方法
def get_name(self):
print(self.name)
# 重写父类的方法,它与要重写的父类方法同名
def get_information(self):
print(self.name + "不是一个" + self.type)
print(self.year)
people = Man('小王','男孩')
people.get_information()
people.get_name()
print(people.act.active)
输出:
小王不是一个男孩
20
小王
act-tion
2.4 导入类
(1)导入单个类
from 模块名 import 类名
(2)在一个模块中存储多个类
from 模块名 import 类名
(3)从一个模块中导入多个类
from 模块名 import 类名1,类名2
(4)导入整个模块
import 模块名
(5)导入模块中的所有类
from 模块名 import *
(6)在一个模块中导入另一个模块
from 模块名 import 类名