Python零基础入门(三)——函数[学习笔记]

目录:
一、函数:
1.内置函数
2.定义函数
二、函数参数:
1.必选参数
2.默认参数
3.可变参数/任意参数
4.关键字参数
三、return语句
四、函数封装
1.导入整个模块
2.导入特定的函数
3.使用 as 给函数指定别名
4.使用 as 给模块指定别名
5.[了解]导入模块中的所有函数

一、函数:

在Python中,函数是一组执行特定任务的相关语句。

函数有助于将我们的程序分解为更小的模块化块。随着我们的计划越来越大,功能使其更加有条理和易于管理。

此外,它避免重复并使代码可重用

1.内置函数:

Python有很多内置的函数供我们使⽤,如:print是Python内置的⼀个函数。

关于Python内置函数的列表,可以参考这个链接
https://docs.python.org/3/library/functions.html.

name = 'zhangsan'
friends =['lisi','wangwu']

print(name.capitalize()) # 首字母大写
print(name.count('n')) # 统计字符i在变量name中出现的次数
print(len(friends))# 计算元素个数

Zhangsan
2
2

2.定义函数

Python内置的函数并不能满⾜足我们所有的需求,我们需要自定义一些函数来实现我们特定的需求。Python中的函数定义是有一些简单的规则的。

函数是编程中最基本的魔法,但同时一切的复杂⼜又都隐含其中。它的原理和我们学习的数学 公式相似,但是并不完全一样,这里先介绍几个常见的词:

  • def(即 define,定义)的含义是创建函数,也就是定义一个函数
  • arg(即argument,参数)有时你还能见到这种写法:parameter
    return 即返回结果

在这里插入图片描述

以下是Python中的函数定义的一些规则:
1.关键字def标记函数头的开始。
2.用于唯一标识它的函数名称。函数命名遵循在Python中编写标识符的相同规则。
3.参数(参数),我们通过它将值传递给函数。它们是可选的。
4.冒号(:)标记函数头的结尾。
5.用于描述函数功能的可选文档字符串(docstring)。
6.构成函数体的一个或多个有效的python语句。语句必须具有相同的缩进级别(通常为4个空格)。
7.用于从函数返回值的可选return语句。

下⾯我们通过两个实际的例⼦来感受下Python函数的定义规则

  1. 计算三⻆形⾯积函数
  2. 摄⽒度到华⽒度转换函数
# 1. 计算三⻆形⾯积函数
def cal_triangle_area(bottom, height):
    return bottom * height / 2
print('底为3,高为4的三角形面积:', end='')
print(cal_triangle_area(3, 4))

底为3,高为4的三角形面积:6.0

# 2. 摄⽒度到华⽒度转换函数
def fahrenheit_converter(C):
    fahrenheit = C * 9/5 + 32
    return str(fahrenheit) + '˚F'
print('摄氏度是37,转换为华氏度是:', end='')
print(fahrenheit_converter(37))

摄氏度是37,转换为华氏度是:98.6˚F

函数返回多个值:

def get_user_info():
    return '小明', 20, '男', '未婚'
name, age, gender, marital_status = get_user_info()
print ('姓 名 :' + name) 
print ('年龄:' + str(age))
print ('性别:' + gender)
print ('婚姻状态:' + marital_status)

姓 名 :小明
年龄:20
性别:男
婚姻状态:未婚

变量的范围和寿命
变量的范围是程序中识别变量的部分。函数内定义的参数和变量在外部不可见。因此,它们具有局部范围。

变量的生命周期是变量在存储器中退出的时间段。函数内部变量的生命周期与函数执行的时间一样长。

一旦我们从函数返回它们就会被销毁。因此,函数不记得先前调用的变量值。

下面是一个示例,用于说明函数内部变量的范围。

def my_func():
	x = 10
	print("Value inside function:",x)

x = 20
my_func()
print("Value outside function:",x)

Value inside function: 10
Value outside function: 20

这里,我们可以看到x的值最初为20。即使函数my_func()将x的值更改为10,它也不会影响函数外部的值。

这是因为函数内部的变量x与外部的变量x不同(函数的本地)。尽管它们具有相同的名称,但它们是两个具有不同范围的不同变量。

另一方面,函数外部的变量从内部可见。它们具有全局范围。

我们可以从函数内部读取这些值,但不能更改(写入)它们。为了修改函数外部变量的值,必须使用关键字global将它们声明为全局变量。

二、函数参数:

1.必选参数

必选参数必须以正确的顺序传入函数。调用时的数量必须和声明时的一样。否则会出错

def cal_triangle_area(bottom, height):
    return bottom * height / 2
print(cal_triangle_area(10)) # 应该传递两个必选参数,实际中只传递了一个,报错

File “”, line 2
return bottom * height / 2
^
IndentationError: expected an indented block

正确调用参数:

def cal_triangle_area(bottom, height):
    return bottom * height / 2
print(cal_triangle_area(10,6)) 

30.0

2.默认参数

函数调用时,如果没有传递参数,则会使用默认参数。例如在计算三角形的⾯面积时,如果没有传递高的值,那默认使用3,如果传递了,就使用传递后的值

def cal_triangle_area(bottom, height=3):
    return bottom * height / 2
print(cal_triangle_area(10)) # 使用默认参数
print(cal_triangle_area(10, 4)) # 使用传递参数

15.0
20.0

注意:函数中的任意数量的参数都可以具有默认值。但是一旦我们有一个默认参数,它右边的所有参数也必须有默认值。

这意味着,非默认参数不能遵循默认参数。例如,如果我们将上面的函数头定义为:
def cal_triangle_area(bottom=6, height):

我们会收到一个错误:

SyntaxError: non-default argument follows default argument

3.可变参数/任意参数

有时,我们事先并不知道将传递给函数的参数数量.Python允许我们通过具有任意数量参数的函数调用来处理这种情况。

在函数定义中,我们在参数名称前使用星号(*)来表示这种参数。这是一个例子。

def greet(*names):
    for name in names:
       print("Hello",name)
greet("Monica","Luke","Steve","John")

Hello Monica
Hello Luke
Hello Steve
Hello John

4.关键字参数

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple(元组)。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。在定义关键字参数时,需要在参数名前加上**号

#关键字参数演示
def person(name,age,**kw):
    print('name:',name,'age:',age,'other:',kw)
#函数person除了必选参数name和age外,还接受关键字参数kw。在调用该函数时,可以只传入必选参数
person('zhangsan',2)
person('zhangsan',2,city='Beijing')
person('David',30,gender='F',job='Engineer')

name: zhangsan age: 2 other: {}
name: zhangsan age: 2 other: {‘city’: ‘Beijing’}
name: David age: 30 other: {‘gender’: ‘F’, ‘job’: ‘Engineer’}

三、return语句

return语句用于退出函数,一个函数中可以有0个或多个return语句,如果函数中没有return语句,则函数返回None(Python关键之一)

四、函数封装:

1.导入整个模块

使⽤模块有什么好处?模块的优势主要有以下⼏点:

  1. ⼤⼤提⾼了代码的可维护性。
  2. 其次,编写代码不必从零开始。当⼀个模块编写完毕,就可以被其他地⽅引⽤。我们在编
    写程序的时候,也经常引⽤其他模块,包括Python内置的模块和来⾃第三⽅的模块。
  3. 使⽤模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同
    的模块中,因此,我们⾃⼰在编写模块时,不必考虑名字会与其他模块冲突。但是也要注
    意,尽量不要与内置函数名字冲突。

PS: ⾃⼰创建模块时要注意命名,不能和Python⾃带的模块名称冲突。例如,系统⾃带了sys
模块,⾃⼰的模块就不可命名为sys.py,否则将⽆法导⼊系统⾃带的sys模块。

要让函数是可导入的,得先创建模块。 模块是扩展名为.py的文件,包含要导入到程序中的代码。

下面来创建一个包含函数make_pizza()的模块。

建立pizza.py

def make_pizza(size, *toppings):
    print("\n制作一个 " + str(size) +"寸的披萨 ,配料有:")
    for topping in toppings:
        print("- " + topping)

接下来,我们在pizza.py所在的目录中创建另一个名为making_pizzas.py的文件,这个文件导
入刚创建的模块,再调用make_pizza()两次:
making_pizzas.py

import pizza
pizza.make_pizza(16, '香肠')
pizza.make_pizza(12,'蘑菇','青椒','芝士')

制作一个 16寸的披萨 ,配料有:

  • 香肠

制作一个 12寸的披萨 ,配料有:

  • 蘑菇
  • 青椒
  • 芝士

Python读取这个文件时,代码行import pizza让Python打开文件pizza.py,并将其中的所有函
数都复制到这个程序中。你看不到复制的代码,因为这个程序运行时, Python在幕后复制这些代
码。你只需知道,在making_pizzas.py中,可以使用pizza.py中定义的所有函数
应用模块中函数的语句:

module_name.function_name()
2.导入特定的函数

你还可以导入模块中的特定函数,这种导入方法的语法如下:

from module_name import function_name

通过用逗号分隔函数名,可根据需要从模块中导入任意数量的函数:

from module_name import function_0, function_1, function_2

对于前面的making_pizzas.py示例,如果只想导入要使用的函数,代码将类似于下面这样:

import pizza import make_pizza
pizza.make_pizza(16, '香肠')
pizza.make_pizza(12,'蘑菇','青椒','芝士')

若使用这种语法,调用函数时就无需使用句点。由于我们在import语句中显式地导入了函数make_pizza(),因此调用它时只需指定其名称。

3.使用 as 给函数指定别名

如果要导入的函数的名称可能与程序中现有的名称冲突,或者函数的名称太长,可指定简短而独一无二的别名——函数的另一个名称

from pizza import make_pizza as mp
pizza.make_pizza(16, '香肠')
pizza.make_pizza(12,'蘑菇','青椒','芝士')

指定别名的通用语法如下:

from module_name import function_name as fn
4.使用 as 给模块指定别名

还可以给模块指定别名。通过给模块指定简短的别名(如给模块pizza指定别名p),能够更轻松地调用模块中的函数。相比于pizza.make_pizza(), p.make_pizza()更为简洁:

import pizza as p
p.make_pizza(16, '香肠')
p.make_pizza(12,'蘑菇','青椒','芝士')

给模块指定别名的通用语法如下:

import module_name as mn
5.导入模块中的所有函数(看懂即可,不推荐使用)

使用星号( *)运算符可让Python导入模块中的所有函数:

from pizza import *
make_pizza(16, '香肠')
make_pizza(12,'蘑菇','青椒','芝士')

如果模块中有函数的名称与你的项目中使用的名称相
同:Python可能遇到多个名称相同的函数或变量,进而覆盖函数,而不是分别导入所有的函数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值