python入到到实战--第八章

第八章 函数

定义函数

关键字def

def get_name():

  print("测试函数代码")

 

调用函数

get_name()

 

向函数传递信息------在函数的括号内添加需要传递的信息

 

实参和形参

在函数定义时,函数括号内的参数是形参;

在调用函数时,函数括号内的参数是实参;

 

传递参数----还可以使用列表和字典

位置实参:实参的顺序和形参的顺序相同---------顺序很重要,如果顺序错误,则实际结果会跟预期结果差别

关键字实参:每个实参由变量名和值组成;

位置实参

def test1(abc, bcd):

  print(abc + " " + bcd)

test("1111","222")  >>>1111 2222

关键字实参:

def test2(abc, bcd):
print(abc + " " + bcd)

test2(abc = "1111",bcd = "222") >>>1111 2222

 

默认值:

编写函数时,可以给每个形参指定默认值,调用函数时,如果提供了实参,则使用指定的参数,否则将使用形参的默认值。

def test3(abc="00000"):

  print(abc)

test3()  >>>00000

test3("789") >>>789

当有多个形参,而实参个数少与形参个数时,根据实参顺序和形参顺序进行匹配。

可混合使用位置实参、关键字实参和默认值,

 

避免实参错误:

调用函数时,未指定任何实参

出现traceback 错误时,请确保函数调用和函数定义匹配。

返回值:函数返回的值称为返回值

调用有返回值的函数时,需要提供一个变量,用户存储返回的值。

让实参变为可选的--------在定义函数时,给形参添加使用默认值。

 

返回字典:

def build_person(first_name, last_name):
"""返回一个字典, 其中包含有关一个人的信息"""
   person = {'first': first_name, 'last': last_name}
   return person


musician = build_person('jimi', 'hendrix')
print(musician)

结合使用函数和while 循环 :

def get_formatted_name(first_name, last_name):
  """返回整洁的姓名"""
  full_name = first_name + ' ' + last_name
  return full_name.title()

# 这是一个无限循环!
while True:
   print("\nPlease tell me your name:")

  f_name = input("First name: ")
  l_name = input("Last name: ")
  formatted_name = get_formatted_name(f_name, l_name)
  print("\nHello, " + formatted_name + "!")
=========================

增加循环退出条件

def get_formatted_name(first_name, last_name):
"""返回整洁的姓名"""
  full_name = first_name + ' ' + last_name
  return full_name.title()
while True:
  print("\nPlease tell me your name:")
  print("(enter 'q' at any time to quit)")
  f_name = input("First name: ")
  if f_name == 'q':
    break
  l_name = input("Last name: ")
    if l_name == 'q':
  break
  formatted_name = get_formatted_name(f_name, l_name)
  print("\nHello, " + formatted_name + "!")
=========================

传递列表

def greet_users(names):
"""向列表中的每位用户都发出简单的问候"""
  for name in names:
    msg = "Hello, " + name.title() + "!"
    print(msg)


usernames = ['hannah', 'ty', 'margot']
greet_users(usernames)



在函数中修改列表:

将列表传递给函数后, 函数就可对其进行修改。 在函数中对这个列表所做的任何修改都是永久性的, 这让你能够高效地处理大量的数据。
禁止函数修改列表 :向函数传递列表的副本而不是原件; 这样函数所做的任何修改都只影响副本, 而丝毫不影响原件
要将列表的副本传递给函数, 可以像下面这样做 :function_name(list_name[:])     ----------切片表示法[:] 创建列表的副本。

 

传递任意数量的实参 --预先不知道函数需要接受多少个实参,python函数允许函数从调用语句中收集任意数量的实参。
def make_pizza(*toppings):
"""打印顾客点的所有配料"""
  print(toppings)
make_pizza('pepperoni')
make_pizza('mushrooms', 'green peppers', 'extra cheese')

解释:形参名*toppings 中的星号让Python创建一个名为toppings 的空元组, 并将收到的所有值都封装到这个元组中。 

结合使用位置参数实参和任意实参:

如果要让函数接受不同类型的实参, 必须在函数定义中将接纳任意数量实参的形参放在最后。

使用任意数量的关键字实参

 

将函数存储在模块中
导入整个模块 import module_name

调用模块的函数:module_name.function()

模块 是扩展名为.py的文件 。
导入特定的函数  from module_name  import function_name001, function002

调用函数:直接函数名调用,不需要使用模块名.函数名的方式调用

使用as 给函数指定别名 -----函数名太长或者函数名冲突时,方便使用

from module_name import function_name as  f_n

使用as 给模块指定别名 ---import module_name as  m_n

导入模块的所有函数---from module_name import *

 

 

函数编写指南

1、给函数指定描述性名称,只使用小写字母和下划线

2、每个函数应该包含简要阐述其功能的注释,注释位置应该是定义函数的后面

3、给形参指定默认值时,等号两边不要有空格

4、函数调用时,关键字实参的等号两边不要有空格

5、形参列表比函数体多缩进一层

6、使用4个空格缩进

 

posted @ 2018-11-05 16:39  beihaiyang  阅读(265)  评论(0编辑  收藏  举报