#!/bin/python

def test_func():
return "test_func" a = test_func()
print(a)

输出结果:

test_func

形式2:带两个参数,返回他们的乘积值

#!/bin/python

#return a * b
#a: int | float
#b: int | float
def multiply(a, b):
return a * b t = multiply(100, 20)
print(t)

输出结果:2000

这里需要对两个参数说明下,包括他们的类型。因为python是动态语言,定义函数的时候不需要明确指出参数的类型,正因为这样松散的约定,所以比较推荐的做法就是:

靠开发来保证参数的类型说明,否则后续很难阅读。

形式3:其中一个参数是有默认值的

#return a * b
#a: int | float
#b: int | float
def multiplyByDefault10(a, b = 10):
return a * b t = multiplyByDefault10(100)
print(t)

输出结果:1000

高级主题4:参数是引用传递还是值传递

参考问题:https://www.zhihu.com/question/20591688

所有函数都是引用传递,只是对于不可变类型的变量(int,float,string),会重新开辟一个空间;对于可变类型(dict,list等),是直接引用传递,操作数据时直接修改的原始变量。

这点和c,php是不一样的,c可以传递指针,php可以传递引用,强制修改外部变量。

高级主题5:可变参数的函数如何定义,如何使用?

5.1,参数列表为tuple类型,只有value,没有key

def print_changeable_args(*args):
print(args) print_changeable_args(1, 2, 3)

输出结果:

(1, 2, 3)

如果调用处改为:print_changeable_args(a=1, b=2, c=3)

会报错:TypeError: print_changeable_args() got an unexpected keyword argument 'a'

5.2,参数列表为dict类型,有key,也有value

def print_changeable_args_dict(**args):
print(args) print_changeable_args_dict(a=1, b=2)

输出结果:

{'a': 1, 'b': 2}

如果调用处改为tuple方式:print_changeable_args_dict(1, 2)

报错:TypeError: print_changeable_args_dict() takes 0 positional arguments but 2 were given

5.3,不定参数中既有tuple,又有dict类型

实际中很少出现这种情况,通常dict类型就可以搞定所有的情况。

def print_changeable_tuple_dict(* argv1, ** argv2):
print(argv1)
print(argv2) print_changeable_tuple_dict(1, 2, 3)
print_changeable_tuple_dict(1, 2, 3, a=1, b=2)

输出:

(1, 2, 3)
{}
(1, 2, 3)
{'b': 2, 'a': 1}

以上是正常情况。

异常1:如果最开始没有tuple参数,直接使用dict参数,结果如何?

print_changeable_tuple_dict(a=1, b=2)

输出:

()
{'b': 2, 'a': 1}

异常2:如果tuple没有,dict也没有,结果如何?

print_changeable_tuple_dict()
输出:
()
{}

异常3:如果tuple有,dict也有,但是他们是乱序的。

print_changeable_tuple_dict(a=1, 1)
报错:SyntaxError: positional argument follows keyword argument print_changeable_tuple_dict(1, 2, 3, a=1, b=2, c=3, 4)
报错:SyntaxError: positional argument follows keyword argument

可以看到tuple不能出现在dict后面。

5.3,不定参数中既有tuple,又有dict类型,但是参数定义时dict在前,tuple在后

def print_changeable_dict_tuple(**argv1, *argv2):
print(argv1)
print(argv2) print_changeable_dict_tuple(a=1)

报错:

    def print_changeable_dict_tuple(**argv1, *argv2):
^
SyntaxError: invalid syntax

6,作为包函数来被其它文件所使用

a,我们来构造一个函数

#!/bin/python
#!--encoding: UTF-8 #fname(string): write file name
#content(string): write content to fname
def write_sth_to_file(fname, content):
fp = open(fname, 'a+')
fp.write(content + "\n")
fp.close()

保存为helper.py。

b,创建函数调用者example.py,这里必须和helper.py放在同一文件夹下

#!/bin/python

import helper

helper.write_sth_to_file('/tmp/aaa.log', 'This is example')

我们使用到a中的函数write_sth_to_file。

执行结果就是把字符串附加到文件/tmp/aaa.log中。

这里函数作为包中的一个单元被引入到其它文件中,是将来组建大型项目中必备的机制。

这里有个疑问点需要解释下?为什么可以直接import helper就可以用呢?引用其它的包可以吗?这里引入的规则是什么?

import查找包的逻辑是:

a,优先加载和执行文件同一目录下的库,(example.py下如果有helper.py,则优先加载该文件,如果没有则继续查找);

b,加载python的内置库(我本地是/usr/lib/python3.5/helper.py,如果没找到,则继续查找);

c,加载python的个人local目录下的三方库(我本地是.local/lib/python3.5/site-packages/helper.py);

d,加载python的三方包(我本地是/usr/local/lib/python3.5/dist-packages/helper.py);

22 【python】入门指南:函数的更多相关文章

  1. Python入门之 函数

    Python入门之 函数 1.初识函数 1.1 什么是函数? <1> 将某个功能封装到一个空间中就是一个函数 <2> 减少重复代码 1.2 定义函数 def -- python ...

  2. Python入门篇-函数、参数及参数解构

    Python入门篇-函数.参数及参数解构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.函数概述 1>.函数的作用即分类 函数 数学定义:y=f(x) ,y是x的函数,x ...

  3. Python入门指南(超详细)

    Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫.但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑科技.本文主要针对的读者是: 毫无 ...

  4. Python入门-初始函数

    今天让我们来初步认识一个在python中非常重要的组成部分:函数 首先,让我们来幻想这样一个场景: 比如说我们现在想要通过社交软件约一个妹子,步骤都有什么? print('打开手机 ') print( ...

  5. python入门15 函数

    函数的主要作用是实现代码复用 1 python内置函数 2 匿名函数lambda 3 自定义函数 def functionname(arg):... #coding:utf-8 #/usr/bin/p ...

  6. Python入门day04_函数与装饰器

    一.函数入门 什么是函数: # 函数:函数是一系列代码的集,用来完成特定功能的代码块,类似于工具,可以重复不但的去使用 为什么要有函数: # 优点:# 1. 避免代码的冗余 # 2. 让程序代码结构更 ...

  7. Python 入门指南

    Release: 3.4 Date: March 29, 2014 Python 是一门简单易学且功能强大的编程语言. 它拥有高效的高级数据结构,并且能够用简单而又高效的方式进行面向对象编程. Pyt ...

  8. python入门总结-函数

    函数形式: def functionname(paramlist): function body 局部变量不改变实参的值,如果需要改变,声明global.比如,global x 可以给函数默认值,注意 ...

  9. python入门之函数

    为什么要用函数 python的函数是由一个新的语句编写,即def ,def是可执行的语句--函数并不存在,知道python运行了def后才存在. 函数是通过赋值函数传递的,参数通过赋值传递给函数. d ...

  10. Python入门之函数的装饰器

    本章目录: 装饰器: 一.为什么要用装饰器 二.什么是装饰器 三.无参装饰器 四.装饰器语法糖 五.认证装饰器实现 六.叠加多个装饰器 七.带参装饰器 ======================== ...

随机推荐

  1. RAD Tokyo 10.2.2

    TDialogService类 如果您是使用比较新的RAD Studio版本. 那么您应该开始改用FMX.DialogService程序单元中TDialogService类别的类别方法来取代以前的Me ...

  2. clientX,screenX,pageX,offsetX的异同

    pageX/pageY: 鼠标相对于整个页面的X/Y坐标.注意,整个页面的意思就是你整个网页的全部,比如说网页很宽很长,宽2000px,高3000px,那pageX,pageY的最大值就是它们了. 特 ...

  3. day10-列表生成式

    列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 1.生成一个列表 a = [i for i in range(1,100) if ...

  4. 区分slice,splice和split方法

    1.slice(数组) 用法:array.slice(start,end) 解释:该方法是对数组进行部分截取,并返回一个数组副本:参数start是截取的开始数组索引,end参数等于你要取的最后一个字符 ...

  5. ArcGIS案例学习笔记-点群密度统计

    ArcGIS案例学习笔记-点群密度统计 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:对于点群,统计分布密度 数据: 方法: 1. 生成格网 2. 统计个数, ...

  6. 吴裕雄 04-mysql创建数据库

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin'; CREATE DATABASE 数据库名 ...

  7. PageRank算法和谷歌搜索讲解

    PageRank算法和谷歌搜索讲解 吴裕雄 PageRank算法实际上就是Google使用它来计算每个网页价值的算法. Google每次的搜索结果都有成百上千万甚至上亿个相关的查询网页链接.如果将所有 ...

  8. python使用cv2显示图片像素值

    给定一张灰度图,显示这张图片的像素值 def show_image_pixel(img): ''' :param img: 需要输出像素值的图像,要求是灰度图 :return: 无返回值 ''' he ...

  9. 关于ros将opencv版本固定“写死”的一些想法

    今天主要工作是将ros和zed结合起来,但是发现自己安装了opencv3.1,ros indigo安装的是opencv2.4.8,这就麻烦了,zed支持的是opencv3.1.一开始使用slam2时, ...

  10. html页面嵌套---分享功能

    1.使用原因 项目中用到了thymeleaf去渲染模板,但是我们这有一个分享的页面,分享出去的页面要加上与生成模板不一样的内容.因为重新再加一套模板又会引起内容的重复与资源浪费.这里就用到了JS的lo ...