详解Python 函数

Python 中函数的应用非常广泛,比如 input() 、print()、range()、len() 函数等等,这些都是 Python 的内置函数,可以直接使用。

3.1 def语句和参数

如果调用print()或者len()函数,你会传入一些值,放在括号之间,在这里称为“参数”。也可以自己定义接收参数的函数。

>>> def hello (name):
print('hello '+ name)
>>> hello('alice')
hello alice
>>> hello('bob')
hello bob

在这个程序的hello()函数定义中,有一个名为name的变元。“变元”是一个变量,当函数被调用时,参数就存放在其中。

【注】保存在变元中的值,在函数返回后就丢失了。

3.2 返回值和return语句

函数调用求值的结果,称为函数的“返回值”。

用def语句穿创建函数时,可以用return语句指定应该返回什么值。return语句也包含以下部分

  • return 关键字
  • 函数应该返回的值或表达式

如果在return语句中使用了表达式,返回值就是该表达式求值的结果。

3.3 None值

在python中有一个值称为None,他表示没有值。None是NoneType数据类型的唯一值。 print()函数在屏幕上显示文本,但他不需要返回任何值,这就和len()和input()不同。但既然所有函数调用都需要求值为一个返回值,那么print()就返回None

>>> spam = print('hello')
hello
>>> None ==spam
True
>>>

在幕后,对于没有return语句的函数定义,python都会在末尾加上return None。这类似于while或者fo循环隐式的以continue语句结尾。而且,如果使用带值的return语句(也就是只有return关键字本身),那么就返回None。

3.4关键字参数和print()

大多数参数是由他们在函数调用中的位置来识别的。但是“关键字参数”是有函数调用是加在他们前面的关键字来识别的。关键字参数通常用于可选变元*。例如,print()函数有可选的变元end和sep,分别指定在参数末尾打印什么,以及在参数之间打印什么来隔开它们*

>>> print('dog','cat','mice')
dog cat mice
>>> print('dog','cat','mice',sep=',')
dog,cat,mice
>>>

3.5 局部作用域

在被调用函数内赋值的变元和变量,处于该函数的“局部作用域”,在所有函数之外复制的变量,属于“全局作用域”。处于局部作用域的变量,被称为“局部变量”。处于全局作用域的变量,被称为“全局变量”。一个变量必是其中的一种,不能既是全局有事局部的。 可以将“作用域”看成是变量的容器。当作用域被销毁时,所有保存在该作用域内的变量值就被丢弃了。

作用域很重要,理由如下:

  • 全局作用域中的代码不能使用任何局部变量
  • 但是,局部作用域可以访问全局变量
  • 一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量
  • 如果在不同的作用域中,你可以用相同的名字命名不同的变量

3.5.1 局部变量不能在全局作用域内使用

def spam():
   eggs = 111
spam()
print(eggs)

如果运行这个程序就会出错,eggs变量只属于spam()调用所创建的局部作用域。

3.5.2 局部作用域不能使用其他局部作用内的变量

def spam():
   eggs = 99
   bacon()
   print(eggs)
   
def bacon()
   ham = 101
   eggs = 0
   
spam()

程序运行时,spam()被调用,创建一个局部作用域。局部变量eggs被赋值为99。然后bacon()函数被调用,创建第二个作用域。多个局部作用域能同时存在。在这新的局部作用域中,局部变量ham也被创建被赋值为101。局部变量eggs也被创建并赋值为0。 当bacon()返回时,这次调用的局部作用域被销毁。程序执行在spam()函数中继续,打印出eggs的值。这次spam()调用的局部作用域任然存在,eggs被赋值为99.

3.5.3 全局变量可以在局部作用域中读取

def spam():
   print(eggs)
eggs = 42
spam()
print(eggs)

3.6 global 语句

如果需要在一个函数内修改全局变量,就是用global语句

有四条法则,来区分一个变量是处于局部作用域还是全局作用域

  • 如果变量在全局作用域中使用(即在所有函数之外),它就是全局变量
  • 如果在一个函数中,有针对该变量的global语句,它就是全局变量
  • 否则,如果该变量用于函数中的赋值语句,它就是局部变量
  • 但是,如果该变量没有用在赋值语句中,它就是全局变量

3.7 异常处理

当程序运行出错时,可以用try和except语句来处理。那些可能出错的语句被放在try子句中。如果错误发生,程序执行就转到接下来的except子句开始处。

如果try子句中的代码导致一个错误,程序执行就立即转到except子句中的代码,一旦执行跳到except子句的代码中,就不会回到try的子句中了

3.8一个小程序:猜数字

import random

secretNumber = random.randint(1,20)
print('i am think of number between 1 and 20:')

for guessesTaken in range(1,7):
   print('take a guess')
   guess = int(input())

   if guess print('you guess is too low.')
   elif guess > secretNumber:
       print('you guess is too high')
   else:
       breakif guess == secretNumber:
   print('good job!the number i was thinking of was ' + str(secretNumber)+
         ' and  you guessed my number in  ' +  str(guessesTaken) + ' guesses')
else:
   print('Nope. the number i was thinking of was ' + str(secretNumber))

3.9 实践

Collatz 序列 编写一个名为 collatz()的函数,它有一个名为 number的参数。如果参数是偶数,那么 collatz()就打印出 number // 2,并返回该值。如果 number是奇数,collatz()就打印并返回 3 * number + 1。

然后编写一个程序,让用户输入一个整数,并不断对这个数调用collatz(),直到函数返回值1(令人惊奇的是,这个序列对于任何整数都有效,利用这个序列, 你迟早会得到 1!既使数学家也不能确定为什么。你的程序在研究所谓的“Collatz 序列”,它有时候被称为“最简单的、不可能的数学问题”)。

在前面的项目中添加 try 和 except 语句,检测用户是否输入了一个非整数的字符串。正常情况下,int()函数在传入一个非整数字符串时,会产生 ValueError 错误,比如 int(‘puppy’)。在 except子句中,向用户输出一条信息,告诉他们必须输入一个整数。

示例代码1:

def collatz(number):
   if number == 1:
       return 1
   elif number % 2 == 0:
       numbers = number//2
       print(numbers)
       collatz(numbers)
   elif number % 2 == 1:
       numbers = 3*number+1
       print(numbers)
       collatz(numbers)


print('please input a number')
try:
   number = int(input())
   collatz(number)
except ValueError:
   print('please input a integer number')

示例代码 2:

def collatz(number):

   if number % 2 == 0:
       numbers = number//2
       return numbers
   else:
       numbers = 3*number+1
       return numbers


print('please input a integer number')
try:
   number=int(input())
   while collatz(number) != 1:
       print(collatz(number))
       new_number=collatz(number)
       number = new_number
       collatz(number)
   print(collatz(number))
except ValueError:
   print('please input a integer')

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/215766.html<

(0)
运维的头像运维
上一篇2025-04-12 09:57
下一篇 2025-04-12 09:58

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注