• python_函数的基本操作


      1 ##---------------------- 函数 ----------------------
      2 
      3 ##1 定义函数
      4 def hello_py():
      5     print('hello,python!')
      6     
      7 hello_py()
      8 ##1.1向函数传递消息
      9 def get_message(username):
     10     print('Hello,'+username.title()+'!')
     11 name=input('请输入你的姓名:')
     12 get_message(name)
     13 ##1.2实参和形参
     14 '''
     15 前面定义函数 get_message() 时,要求给变量 username 指定一个值。调用这个函数并提供这种
     16 信息(人名)时,它将打印相应的问候语。
     17 在函数 get_message() 的定义中,变量 username 是一个形参——函数完成其工作所需的一项信
     18 息。在代码 get_message(name) 中,值 name 是一个实参。实参是调用函数时传递给函数的信
     19 息。我们调用函数时,将要让函数使用的信息放在括号内。在 get_message(name) 中,将实参
     20 name的值 传递给了函数 get_message() ,这个值被存储在形参 username 中。
     21 
     22 形参和实参位置顺序要一一对应
     23 函数也可以多次调用
     24 基本上与C语言一样
     25 '''
     26 ##1.3默认值
     27 '''
     28 编写函数时,可给每个形参指定默认值。在调用函数中给形参提供了实参时,Python将使用
     29 指定的实参值;否则,将使用形参的默认值。因此,给形参指定默认值后,可在函数调用中省略
     30 相应的实参。使用默认值可简化函数调用,还可清楚地指出函数的典型用法。
     31 '''
     32 def describe_pet(pet_name,animal_type='哈士奇'):
     33     #显示宠物的信息
     34     print('我在家养过宠物,我给它起名叫做:'+pet_name)
     35     print(pet_name+'是一只非常好的'+animal_type)
     36 describe_pet('神奇')##第二个参数使用默认值
     37 
     38 ###1.4各种调用方法
     39 describe_pet('传奇')
     40 describe_pet(pet_name='传奇')
     41 describe_pet('可可','')
     42 name='巧巧' 
     43 an_type=''
     44 describe_pet(name,an_type)##利用别的变量传递
     45 ##1.5返回简单值
     46 def get_formatted_name(first_name,last_name):
     47     full_name=last_name+' '+first_name
     48     return full_name.title()
     49 musician=get_formatted_name('','慕容')
     50 print(musician)
     51 ##1.5让实参变成可选的
     52 '''
     53 有时候,需要让实参变成可选的,这样使用函数的人就只需在必要时才提供额外的信息。可
     54 使用默认值为空来让实参变成可选的。
     55 '''
     56 ##返回字典
     57 def build_person(first_name,last_name,age=''):##此处利用age默认值为空实现了参数的可选择性
     58     ##返回一个在字典,其中包括一个人信息
     59     person={'first':first_name,'last':last_name}
     60     if age:
     61         person['age']=age
     62     return person
     63 musician=build_person('','欧阳')
     64 print(musician)
     65 print('---------------------------------')
     66 ##函数和while循环的结合
     67 circulation=True##循环变量
     68 while circulation:
     69     print('输入你的名字和姓氏:')
     70     f_name=input('first_name:')
     71     l_name=input('last_name:')
     72     full_name=build_person(f_name,l_name)
     73     print('你好'+str(full_name['first']+str(full_name['last'])))
     74     print('后面,还有小朋友吗?(yes/no)')
     75     answer=input()
     76     if answer=='no' or answer=='NO' or answer=='n':
     77         circulation=False
     78 
     79 ##传递列表
     80 print('-----------------------------------------')
     81 def greet_user(names):
     82     for name in names:
     83         msg='hello'+name.title()+'!'
     84         print(msg)
     85 
     86 user_list=['小明','小华','杰克']
     87 greet_user(user_list)
     88 ##在函数中修改列表
     89 print('---------------------------------------------')
     90 
     91 
     92 ##函数后序内容
     93 '''
     94 将列表传递给函数后,函数就可对其进行修改。在函数中对这个列表所做的任何修改都是永
     95 久性的,这让你能够高效地处理大量的数据。
     96 来看一家为用户提交的设计制作3D打印模型的公司。需要打印的设计存储在一个列表中,
     97 打印后移到另一个列表中。
     98 '''
     99 def print_models(unprinted_designs,completed_models):
    100     ##打印每个设计后,都将其移到列表completed_models中
    101     while unprinted_designs:
    102         current_design=unprinted_designs.pop()
    103         
    104         ##模拟根据要求的打印过程
    105         print('正在打印中的模型是:'+current_design)
    106         completed_models.append(current_design)
    107 def show_completed_models(completed_models):
    108     ##显示所有打印好的模型
    109     print('打印完成的模型列表:
    ')
    110     for print_over_models in completed_models:
    111         print('	'+print_over_models)
    112         
    113 unprinted_designs=['160_轰炸机','米格——3k拦截机','苏——57战斗机','F22战斗机']
    114 completed_models=[]
    115 print_models(unprinted_designs,completed_models)
    116 print('
    
    ')
    117 show_completed_models(completed_models)
    118 
    119 ##禁止函数修改列表(利用列表切片实现)
    120 ##例:print_models(unprinted_designs[:],completed_models[:])
    121 
    122 ##传递任意数量的参数
    123 def make_pizza(*topping):
    124     ##其中实参*topping是一个元组,所以可以传递任意数量的参数
    125     '''打印顾客点的所有配料'''
    126     print(topping)
    127 
    128 make_pizza('洋葱')
    129 make_pizza('洋葱','鸡蛋','面粉','培根')
    130 
    131 ##使用任意数量的关键字实参
    132 ##其中,下面的**user_info可以理解为一个字典
    133 def build_profile(first,last,**user_info):
    134     '''创建一个字典,其中包含我们知道的有关用户的一切'''
    135     profile={}
    136     profile['first_name']=first
    137     profile['last_name']=last
    138     for key,value in user_info.items():
    139         profile[key]=value
    140     return profile
    141     
    142 user_profile=build_profile('','飞燕',性别='',职业='舞蹈艺术家')
    143 print(user_profile)

     将函数存储在模块中:

    下面有两个.py文件(pizza.py和making_pizza.py)用来演示函数模块的导入方式

    1 #将函数存储在模块中
    2 def make_pizza(size,*toppings):
    3     ##概述披萨的制作要求:
    4     print('披萨的尺寸是:'+str(size)+'以及需要的配料有:')
    5     for topping in toppings:
    6         print('	'+str(topping))
    7     
     1 pizza.make_pizza(10,'小麦','牛奶','洋葱','鸡蛋')
     2 
     3 ##导入特定的函数
     4 ##你还可以导入模块中的特定函数,这种导入方法的语法如下:
     5     #form module _name import function_name
     6 ##通过用逗号分隔函数名,可根据需要从模块中导入任意数量的函数:
     7     #form module_name import function_name1,function_name2,function_name3
     8     
     9 ##使用as可以给函数起别名
    10 '''如果要导入的函数的名称可能与程序中现有的名称冲突,或者函数的名称太长,可指定简短
    11 而独一无二的别名——函数的另一个名称,类似于外号。要给函数指定这种特殊外号,需要在导
    12 入它时这样做。
    13 '''
    14 from pizza import make_pizza as mp
    15 mp(10,'面粉')
    16 
    17 
    18 
    19 ##也可以使用as给模块起别名
    20 import pizza as pa 
    21 p.make_pizza(10,'')
    22 
    23 
    24 ##导入模块中的所有函数
    25 from pizza import *
    26 '''import 语句中的星号让Python将模块 pizza 中的每个函数都复制到这个程序文件中。由于导入
    27 了每个函数,可通过名称来调用每个函数,而无需使用句点表示法。然而,使用并非自己编写的
    28 大型模块时,最好不要采用这种导入方法:如果模块中有函数的名称与你的项目中使用的名称相
    29 同,可能导致意想不到的结果:Python可能遇到多个名称相同的函数或变量,进而覆盖函数,而
    30 不是分别导入所有的函数。最佳的做法是,要么只导入你需要使用的函数,要么导入整个模块并
    31 使用句点表示法。这能让代码更清晰,更容易阅读和理解。
    32 '''
  • 相关阅读:
    架构设计
    OpenRisc-37-OpenRISC的CPU&core的整体架构分析
    QFrame好像是万能的(可以随意画线,或者图片,放在其它元素之间做点缀,还可OnClick)
    QTableWidget的使用和美工总结
    QTableWidget表格合并若干问题及解决方法
    24篇HTTP博客
    利用VS2005进行dump文件调试(17篇博客)
    英语提问方式
    架构和框架的区别
    数据访问组件性能
  • 原文地址:https://www.cnblogs.com/best-mingge/p/12866975.html
Copyright © 2020-2023  润新知