Python函数的使用

函数的使用

类似于数学中的函数,Python的可以利用函数来解决问题,那么我们不免要问,什么是函数,为什么要使用函数,如何使用?

1. 函数的定义
2. 函数的意义
3. 函数的使用
4. 练习

1. 函数的定义

在数学中函数是一种映射,其功能是将自变量的值(输入)映射为一个函数值(输出)。编程语言中的函数则是一段代码,可以根据一段输入进行计算,并且产生输出。



2. 函数的意义

  • 使用函数可以减少代码的重复性

当我们需要重复做一件事情的时候(但是根据输入会有不同输出), 这个时候如果我们可以定义一个函数来执行,从而降低代码的重复率。

  • 使用函数可以改善程序的结构

如果我们需要实现一件事情,而且这件事情十分复杂,这样如果我们在代码中直接的写出如何处理,代码将十分长且复杂,让人看不懂,这时我们可以定义一个函数,这个函数来解决这个问题,而在主程序中只需要调用这个函数就可以了

  • 使用函数可以增强程序的通用性

函数可以增强程序的通用性表现在我们可以通过设置不同的参数,从而可以解决同种类型相似的问题,而避免过多的内容



3. 函数的使用

  • 语法:

Python中函数的使用有特定的语法:

def <函数名> (<形式参数>)
    <函数体>

在上述定义中,函数名是一个函数的标识符,命名必须遵守一定的规范(见变量的使用);形式参数可以为空,也可以是用逗号分开的变量名序列;函数体是语句序列,左端必须缩进。


  • 调用

一旦我们定义了一个函数,那么我们便可以随时的调用这个函数,函数的调用为:

<函数名>(<实际参数>)

事实上,当Python遇到一个函数调用的时候,将进行以下的操作:

  • 调用者 p 在调用点暂停(又称挂起)
  • 函数 f 的形式参数被赋予给实际参数的值
  • 执行函数 f 的函数体
  • f 执行完毕时,控制返回到 p 中调用点的下一条语句

下面举例子来说明函数的简单使用

"""
Author: Cyberist
"""
def verify():
    username = input("Username: ")
    passwd = input("Passwd: ")
    if username == "admin" and passwd =="12345":
        print("Login in successfully")

verify( )

在上面的代码中,我们定义了一个无参数的函数,函数的功能是检查登录是否成功,然后我们调用这个函数,如果用户输入的数据满足调节,则提示登录成功。


  • 关键字参数

在函数调用的时候,通常的时候采用的是按位置匹配,但是Python中还可以使用关键字参数,形如 <形参名>=<实参名>,这样使用,我们便可以不必要拘束于参数的位置
比如下面的这个函数:

def print_weclome(name,day):
    print("Hello %s, today is %s"%(name, day))

# 调用的时候可以这样调用
print_welcome("John", "10-28")

# 同时也可以这样调用
print_welcome(day='10-28', "john")


  • 变量的类型

程序中的每个变量都有自己的作用域,只有在对应的区域内访问这个变量,才可以取得理想的结果,变量分为以下两种

  • 局部变量

在一个函数中定义的变量为局部变量,因为他们的作用域局限于这个函数的函数体,在函数外部是没有被定义的,如果在函数外访问会出现下面的结果

>>> def main( ):
...     a = 10
...     b = 10
...
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

  • 全局变量

全局变量是在程序中的任意地方都可以访问的变量,一般而言,全局变量是在程序的非函数中定义的变量,前面没有缩进,但是我们也可以使用global显式的声明全局变量,这样在函数体内我们也可以变这个变量,但是此时仍然需要在函数体定义好了这个变量

str = "Hello World"
 
def test( ):
 
    global str
 
    str += "Welcome to Python !"
print(str)


如果没有`global`声明,函数调用是不会改变变量的值的
```python
"""
显式声明了
Author: Cyberist
"""
>>> a = 100
>>> def test( ):
...     global a
...     a = 10
...
>>> test( )  # 调用函数之后改变了 a 的值
>>> a
10
"""
没有声明
Author: Cyberist
"""
>>> a = 100
>>> def test( ):
...     a =10
...
>>> test( )   # 调用函数之后没有改变 a 的值
>>> a
100

  • 返回值

函数可以处理输入的数据,然后进行一定的输出,我们可以让它们输出到屏幕之上,我们可以获取它的值,我们只需要使用return关键字就可以实现这个功能

def test():
"""
Author: Cyberist
"""
    num = float(input("Input a number, return its sqare: "))
    return num**2

# 这样我们便可以安装下面的这种方式调用函数
an = test()
print(an)

# 输入 2 便会得到输入 4 ,变量 an 中保存的数据是 4

练习

  1. 给定两个平面的点 p1 和 p2(用元组表示),函数slope(p1, p2)可以返回两点之间的斜率,函数intercept(p1, p2)返回该直线在y轴上的截距

说明: 元组用( ),表示,其中的值一旦定义便不可以改变,如果有C/C++编程基础的可以类比于数组,但是这个数组不能改变,我们可以用方括号[ ]来进行索引,如元组 p1, 则 p1[0]是第一个数,p[1]是第二个数据

Answer:

# -*- coding=utf-8 -*-
"""
Author: Cyberist
"""

import math 

def slope(p1,p2):
	"""
	p1 -> 位置参数一
	p2 -> 位置参数二
	func: 计算两点之间的斜率,即使是垂直的直线也可以正确计算
	"""
	try:
		x_diff = p1[0]-p2[0]
		y_diff = p1[1]-p2[1]
		if abs(x_diff) <= 1e-15: 
			# 当x相等的时候,这里采用足够小,因为二进制计算会有误差
			return math.inf
	except Exception as e:
		print(e)
	else:
		return y_diff/x_diff

def intercept(p1,p2):
	"""
	p1 -> 位置参数一
	p2 -> 位置参数二
	func: 计算两点构建的直线的截距
	"""
	try:
		slope_value = slope(p1, p2)
		if slope_value == math.inf:
			return "Do not exist" 
	except Exception as e:
		print(e)
	else:
		return (p1[1]-slope_value*p1[0])

def main(p1,p2):
	# 显示目前测试的位置
	print("Position 1 is : {}".format(p1))
	print("Position 2 is : {}".format(p2))
	# 计算斜率
	slope_value = slope(p1, p2)
	# 计算截距
	intercept_value = intercept(p1, p2)
	# 输出计算结果
	print("Slope: {}".format(slope_value,))
	print("Intercept: {}".format(intercept_value))


main(p1,p2)
input("Press Enter to exit...") # 防止闪退


  1. 设计一个函数,可以判断某一年是否是闰年

Answer:

def is_leap_year(year):
    
    """
    Author: Cyberist
    year : 输入的年份
    功能: 判断输入的年份是否是闰年,并提示
    """
    if year % 4 == 0 and (year % 100 != 0 or year % 400 == 0):
       print("It is a leap year ")
    else:
        print("It is not a leap year")


year = int("Please input a year to test: ")
is_leap_year(year)


  1. 设计一个函数,可以实现求从 0 到输入数据 n 的全部能被 3 整除但是不能被 5 整除的数的和。
"""
Author: Cyberist
"""
def main(num):
    sum = 0  # 记录数值之和
    for i in range(1,num+1):  # range中不包含最后一个数
        if i % 3 == 0 and i % 5 != 0:
            sum += i  # 累计求和
    print("The sum is ", sum)


num = int(input("Input a number: "))
main(num) # 调用函数

更多内容请查看 推送内容内容,欢迎关注公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值