美文网首页Java技术分享
傻瓜式学Python3——函数

傻瓜式学Python3——函数

作者: 张少林同学 | 来源:发表于2017-09-03 13:53 被阅读425次
来自网络.jpg

前言:大周末的闲来无事,继续 Python3 的傻瓜式学习——函数。

函数,每个编程语言都有自己特定的函数表示方式,说直白点,就是把代码封装成一个方法,以做到整洁,方便重复调用的效果,这也是写程序中最经常干的事情。

基本定义

def+方法名: 方法体以四格缩进为准

def greet_user():
    """神奇的Hello World"""
    print('Hello World!')
greet_user()

结果自然是打印神奇的Hello World!

函数传参

def greet_user(userName):
    """打印参数"""
    print(userName)
greet_user('张少林')

结果:张少林

通过位置传递实际参数

调用函数时,按照参数的顺序传入实参,这和一般的函数调用一样,一旦顺序搞错,结果将会出错。

def describe_pet(animal_type,pet_name):
    print('\nI have a ' + animal_type + '.')
    print('My '+ animal_type + ' name is '+ pet_name.title()+ '.')

describe_pet('hamster','harry')

结果:

I have a hamster.
My hamster name is Harry.

通过关键字传递参数

当我们使用传统的按参数位置传递实参的时,需要注意传递的顺序,否则会出现不是我们所期待的结果,那么可以使用关键字传实参,指定传递的实参是存储在哪个形参中。

def describe_pet(animal_type,pet_name):
    print('\nI have a ' + animal_type + '.')
    print('My '+ animal_type + ' name is '+ pet_name.title()+ '.')

describe_pet(animal_type='hamster',pet_name='harry')

结果还是一样。

函数形参默认值

可以给函数形参赋予默认值,假如传入实参,则使用实参值,否则,使用默认值。注意:没有默认值的形参必须放在有默认值的形参前面,python会按照位置解读传递的参数值

def describe_pet(pet_name,animal_type = 'dog'):
    print('\nI have a ' + animal_type + '.')
    print('My '+ animal_type + ' name is '+ pet_name.title()+ '.')

describe_pet(pet_name='willie')

结果:

I have a dog.
My dog name is Willie.

显式传入实参:describe_pet(pet_name='harry',animal_type='hamster')
结果:

I have a hamster.
My hamster name is Harry.

函数返回值

用 return 关键字返回函数处理完逻辑返回的结果

def get_formatted_name(first_name,last_name):
    """返回姓名"""
    full_name = first_name+ ''+last_name
    return full_name

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

结果为: jimihendrix

函数返回字典类型数据

def build_person(first_name,last_name):
    """返回包含人信息的字典数据"""
    person = {'first_name':first_name,'last_name':last_name}
    return person

person = build_person('张','少林')
print(person)

结果:{'first_name': '张', 'last_name': '少林'}

结合 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:')
    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_user(names):
    """传递列表"""
    for name in names:
        msg = 'Hello, '+ name.title()+'!'
        print(msg)

userNames = ['hannah','ty','margot']
greet_user(userNames)

传递任意数量实参

def 函数名(*形参) 使用*形参的形式,在调用函数的时,可以传入任意数量的实参,python 会自动处理实参,并生成一个元组。

def make_pizza(*toppings):
    """传递任意数量实参"""
    print(toppings)
    for topping in toppings:
        print(topping)

#传递一个参数
make_pizza('pepperoni')
#传递三个参数
make_pizza('mushrooms','green peppers','extra cheese')

结果:

('pepperoni',)
pepperoni
('mushrooms', 'green peppers', 'extra cheese')
mushrooms
green peppers
extra cheese

传递任意数量的 key-value

有时候我们不清楚传入的任意实参包含哪些信息,可以使用格式def 函数名(**形参) python 会自动生成一个空的字典存储任意数量的实参

def build_profile(first,last,**user_info):
    """创建一个字典,其中包含我们知道的有关用户的一切"""
    profile = {}
    profile['first_name'] = first
    profile['last_name'] = last
    for key,value in user_info.items():
        profile[key] = value
    return profile

user_profile = build_profile('albert','einstein',locaion = 'princeton',field = 'physics')

print(user_profile)

结果:{'locaion': 'princeton', 'field': 'physics', 'first_name': 'albert', 'last_name': 'einstein'}

使用 import+文件名.py导入 python 文件

函数的存在就是为了封装性,开发中难免会用到各种各样的开源库,这个时候需要导入对应的文件才可以使用封装好的函数。
在 greet_user.py 文件中编写函数

def build_profile(first,last,**user_info):
    """创建一个字段,其中包含我们知道的有关用户的一切"""
    profile = {}
    profile['first_name'] = first
    profile['last_name'] = last
    for key,value in user_info.items():
        profile[key] = value
    return profile

在 S.py文件中导入 greet_user.py 并使用该函数

import greet_user

user_profile = greet_user.build_profile('albert','einstein',locaion = 'princeton',field = 'physics')
print(user_profile)

结果还是一样。注意:可以使用导入的文件名调用该文件中的任意函数

显式导入指定的函数

语法:from 文件名 import 函数名1,函数名2,函数名3.......... 显示指定导入该文件中的哪些函数,调用时,直接指定函数名即可。
在 greet_user.py 文件中编写函数


def build_profile(first,last,**user_info):
    """创建一个字段,其中包含我们知道的有关用户的一切"""
    profile = {}
    profile['first_name'] = first
    profile['last_name'] = last
    for key,value in user_info.items():
        profile[key] = value
    return profile

user_profile = build_profile('albert','einstein',locaion = 'princeton',field = 'physics')

print(user_profile)


def function_1():
    print('i am function1')

def function_2():
    print('i am function2')

def function_3():
    print('i am function3')

在 S.py文件中导入指定函数from greet_user import build_profile,function_1,function_2

from greet_user import build_profile,function_1,function_2

user_profile = build_profile('albert','einstein',locaion = 'princeton',field = 'physics')
print(user_profile)

function_1()

function_2()

导入函数时使用别名

在导入函数时,由于函数名可能存在冲突或者函数名太长,可以使用as指定别名,调用时 直接使用别名即可

from greet_user import build_profile as bp

user_profile = bp('albert','einstein',locaion = 'princeton',field = 'physics')
print(user_profile)

导入文件时指定别名

在导入文件时也可以使用自定义别名,供调用时使用

import greet_user as gu

user_profile = gu.build_profile('albert','einstein',locaion = 'princeton',field = 'physics')
print(user_profile)

使用 * 导入文件中所有函数

直接指定函数名调用即可

from greet_user import *

user_profile = build_profile('albert','einstein',locaion = 'princeton',field = 'physics')
print(user_profile)

最后的思考:
总结编写 python 函数时需要注意的点:

  • 应当给函数指定描述性名称,方便查看
  • 在函数下指定函数的功能注释,通常是文档字符串格式,不习惯写注释的程序猿不是好程序猿
  • 编写有默认值形参时,=前后不能有空格

最后的最后

傻瓜式学 python 第三篇总结写完了,仅仅是一种记录,如果有不妥之处,麻烦评论区指出。

更多原创文章会在公众号第一时间推送,欢迎扫码关注 张少林同学

张少林同学.jpg

相关文章

  • 傻瓜式学Python3——函数

    前言:大周末的闲来无事,继续 Python3 的傻瓜式学习——函数。 函数,每个编程语言都有自己特定的函数表示方式...

  • python3 range() 函数和 xrange() 函数

    python3 range 函数 python3 取消了 xrange() 函数,并且和 range() 函数合并...

  • 傻瓜式学Python3——列表

    前言: 好久不见,突然发觉好久没写博客了,最近迷上了 Python 无法自拔,了解了一下,Python 简单易学,...

  • 傻瓜式学Python3——字典

    经历过七夕的恐怖气息之后,想想程序猿会有女朋友?不存在的,代码才是真爱,继续 Python 的学习之旅—— 字典。...

  • python3函数(一)

    python3中可以调用函数和定义函数。 1、调用函数 直接调用python3自带的函数 (1)函数abs(-10...

  • python3教程

    python3教程 python3函数 python3集合 Python 3.6.3 中文手册

  • Python3字符串处理函数

    Python3字符串处理函数 Python3

  • 傻瓜式学Python3——面向对象

    写在前面 最近心情有些焦虑,说不出的糟糕,但是我不想每天带着负能量生活,,毕竟还有更重要的事情要去做。只有让自己忙...

  • py2, py3 语法差别

    Python3 reload() 函数 https://www.runoob.com/python3/python...

  • Python学习笔记

    python2和python3的区别 print函数 python2的print函数可以不加括号。python3必...

网友评论

    本文标题:傻瓜式学Python3——函数

    本文链接:https://www.haomeiwen.com/subject/tarrjxtx.html