Python学习笔记三:函数

函数

1. 定义

  函数:函数是事先组织好的,可重复使用的,用来实现单一,或相关联功能的代码块/模块。
  定义一个函数:
  你可以定义一个由自己想要功能的函数,以下是简单的规则:
  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。文档字符串用三引号(""" """)括起来。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
  • 因为函数相对独立,所以定义函数的上方(根据PEP8的要求)需要和上其他代码(包括注释)隔开两个空行
def greet_user(user):
    """显示简单的问候"""
    print("hello!%s%s" % (user, '。'))

# 函数的调用
greet_user('Smith')

  注意:

  • 定义一个函数,只表示封装了一段代码,如果不主动调用,函数不会自行运行,所以在进行断点调试时,不会有任何结果显示
  •  基于Python的执行顺序是从上到下,所以如果想要调用一个函数,必须在调用函数前,声明定义这个函数,否则会报错

2. 参数

  在定义函数时,函数名后括号内跟着的变量是形参,用来接收参数,在函数内作为变量使用。

  调用函数时,指定的具体字符是实参。是用来将数据传递到函数内部的。

  以函数greet_user()为例,user是形参,'Smith'就是实参。函数在调用时,会将实参传递给函数,存储在形参里。

2.1 位置实参

  一个函数中可以包含多个形参,也可以传递多个实参。

  传递实参的方法有很多,其中最常用的是位置实参和关键字实参两种。

  位置实参:在向函数传递参数时,形参的位置和实参的位置一一对应,这样的实参叫位置实参。

def describe_animals(animal_type, pet_name):
    """显示宠物信息"""
    print("I have a %s。" % animal_type)
    print("It's name is %s。" % pet_name)


describe_animals('cat', 'kitty')

  注意:在传递位置实参时,形参和实参的对应位置非常重要。虽然不会报错,但结果可能会让人啼笑皆非

describe_animals('kitty', 'cat')


I have a kitty。
It's name is cat。

2.2 关键字实参

  在调用函数时,明确给出各个形参所对应的实参,这就是关键字实参。

def describe_animals(animal_type, pet_name):
    """显示宠物信息"""
    print("I have a %s。" % animal_type)
    print("It's name is %s。" % pet_name)


describe_animals(animal_type='cat', pet_name='kitty')

2.3 默认值

  在声明函数时,可以事先给形参指定默认值,这样调用时,可以只调用没有默认值的形参。

  注意:使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的实参。这让Python依然能够正确地解读位置实参。

def describe_animals(animal_type, pet_name='kitty'):
    """显示宠物信息"""
    print("I have a %s。" % animal_type)
    print("It's name is %s。" % pet_name)


describe_animals(animal_type='cat')

 2.4 传递任意数量的实参

  函数形参前的*号,表示创建一个形参名称的元组,待调用函数时,Python会将传递进来的实参,全部封装进这个元组。

  不管传递进来多少个实参,都会被封装进一个元组内。

 

def make_pizza(*toppings):
    """打印制作披萨的所有食材"""
    print("Making a piece of pizza with following toppings:")
    for topping in toppings:
        print(topping)


make_pizza('mushrooms', 'green peppers', 'extra cheese') 

  注意:传递多个参数,而不是传递一个含有多个元素的元组

① 结合位置实参和任意数量实参

  如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在后面。Python先匹配位置实参和关键字实参,再将余下的实参都封装到最后一个形参中。

def make_pizza(size, *toppings):
    """显示制作披萨的所有用料"""
    print("Make a %d-inch pizza。" % size, end='')
    print("With following toppings:")
    for topping in toppings:
        print(topping)


make_pizza(12, 'cheese', 'onion', 'mushrooms') 

② 任意数量的位置实参和默认值

  默认值和任意数字的位置实参结合时,默认值要放在前面。

def make_pizza(size=10, *toppings):
    """显示制作披萨的所有用料"""
    print("Make a %d-inch pizza。" % size, end='')
    print("With following toppings:")
    for topping in toppings:
        print(topping)


make_pizza(12, 'cheese', 'onion', 'mushrooms')    

③ 任意数量的关键字实参

  函数形参前加上**,创建一个形参名称的字典,待调用函数时,Python会传递进来的实参,全部封装到这个字典中。

def make_pizza(size, **toppings):
    """打印纸多披萨所需的原材料"""
    print("Make a %d-inch pizza with following toppings:" % size)
    topping = {}
    for key, value in toppings.items():
        topping[key] = value
        print(key.title()+':')
        print(value)


make_pizza(size=10, vegetable='Cucumber', meat='bacon', seasoning='salt')

④ 任意数量的关键字实参和默认值

def make_pizza(size=10, **toppings):
    """打印纸多披萨所需的原材料"""
    print("Make a %d-inch pizza with following toppings:" % size)
    topping = {}
    for key, value in toppings.items():
        topping[key] = value
        print(key.title()+':')
        print(value)


make_pizza(size=12, vegetable='Cucumber', meat='bacon', seasoning='salt')

  总结:在Python中,函数的参数位置应该按照以下顺序排序:

  1. 位置参数(必须参数)
  2. 默认值参数
  3. 可变成位置参数(既:任意数量的位置参数)
  4. 可变长关键字参数(既:任意数量的关键字参数)
def my_func(a, b, c=0, *args, **kwargs):
    pass


my_func(1, 2, 3, 4, 5, x=6, y=7)

1,2是位置参数;3是默认值参数;4,5是可变长位置参数;x和6是关键字参数,被封装到kwargs名称的字典传递给函数。 

3. 返回值

4. 变量

变量分为局部变量和全局变量,局部变量的作用域为函数体,

将局部变量声明为全局变量,可以使用global关键字,这样在函数体内部声明的局部变量,就变成一个全局变量

# 在函数体内声明一个全局变量
global var
var = value

 

 

模块

1. 定义

  在Python中,模块是一个包含Python代码的文件,它可以包含函数、类、变量和常量等。模块可以被其他Python程序导入并使用,这样可以避免重复编写代码,提高代码的复用性和可维护性。

  简单来说,每个带.py后缀的文件就是一个模块。

  Python中的模块可以是标准库模块、第三方模块或自定义模块。标准库模块是Python自带的模块,包含了大量的常用功能,例如操作系统接口、文件I/O、字符串处理、网络通信等。第三方模块是由其他开发者编写的模块,可以通过pip等包管理工具安装。自定义模块是由开发者自己编写的模块,可以根据需要定义函数、类、变量和常量等。

2. 模块名

  在Python中,模块名也是一个标识符,所以遵循:

  • 标识符由数字,字母和下划线组成
  • 不能以数字开头
  • 标识符的长度没有限制,但为了方便使用,尽量做到简单明了
  • 区分大小写
  • 尽量避免使用系统自带的关键字,例如:if,else,while,print等等

3. 模块的使用

① import语句

  模块定义好后,我们可以使用import语句来引入模块,具体语法:

import module1[,module2,...modulen]
module.function

  例如我们想要使用test1.py内的print_line()函数,用法如下:

# 导入模块
import test1
# 调用test1.py中的print_line()函数
test1.print_line() 

② from...import语句

  Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下:

from module import function1[,function2,...functionN]

  有时为了方便,我们会使用as给指定函数起别名,之后此函数名要使用别名,而不是原来的名字

from test1 import print_line as pl

③ 使用*导入模块内的所有函数

from module import *

  

 

 

 

 

 

 

 

posted @ 2023-05-11 11:45  ISPEAKER  阅读(58)  评论(0编辑  收藏  举报