一.函数的定义
1.函数的定义和Java类似。主要结构是(注意冒号)

def 方法名(参数):
方法实现
具体例子:
def greet_user(username):
    print("hello"+username)

2.对于方法中,参数的使用无非就两种。一种就是和java一样的顺序(位置实参),另外一种就是区别于java的可以指定对应的参数名(关键字实参)

def greet_user(username,age):
    print(str(username)+"今年"+str(age)+"岁了")

greet_user('小明',5)                   ===》结果  小明今年5岁了
greet_user(5,'小明')                    ===》结果  5今年小明岁了
greet_user(age=5,username='小明')      ===》结果 小明今年5岁了

3.设置默认值

def greet_user(username,age=21):
    print(str(username)+"今年"+str(age)+"岁了")

greet_user('小明') ===》结果 小明今年21岁了

4.返回值
和Java一样,用一个return,return可以return多种数据类型,例如字典

def greet_user(username,age=21):
    print(str(username)+"今年"+str(age)+"岁了")
    return {'wo':'ll','ni':"oo"}
result = greet_user('小明')
print(result)
结果:小明今年21岁了
{'wo': 'll', 'ni': 'oo'}

二.函数的调用
1.如果传入的是对象,例如列表对象,那么列表对象被方法操作以后外部的列表也会变化(因为和java一样,传入的是指向)。例如

def greet_user(str):
    str.pop()
can = ['wo','shi','ni']
print(can)      ======》结果:['wo', 'ni', 'shi']
greet_user(can)
print(can)       ======》结果:['wo', 'ni']

2.当然,你如果不想自己原有的值被修改,那么你就弄一个对象复制原有列表的值,然后再进行操作就可以(用切片,不可以直接等于,要不然还是指向

def greet_user(str):
    str.pop()
can = ['wo','shi','ni']
print(can)        ======》结果:['wo', 'ni', 'shi']
greet_user(can[:])
print(can)        ======》结果:['wo', 'ni', 'shi']

3.传递任意数量的实参
3.1.普通实参,其实就是传入一个元组。注意看参数有个*

def greet_user(*str):
    print(str)
greet_user('nihoa',25,'shime')
结果:('nihoa', 25, 'shime')

3.2.关键字实参,其实就是传入一个字典。注意有两个* 。这种适用于方法内取值得

def greet_user(**str):
    print(str['jj'])
greet_user(jj='wo',hh='5')
结果:wo

三.导入
1.导入整个模块:先import导入,使用的时候文件名.方法名

Hello.py
def greet_user(**str):
    return str['jj']
Test.py
import hello
peron = hello.greet_user(jj='wo',hh='5')
print(peron)

2.导入具体方法: from 文件名 Import 方法名,使用的时候直接方法名。当然,导入的两个文件中的方法名一致,为了避免冲突,可以使用 : from 文件名 Import 方法名 as 别名。使用的时候直接用别名

from hello import greet_user
peron = greet_user(jj='wo',hh='5')
print(peron)

3.当然,如果你想像第一种那样,可是又不想每次调用方法都要用文件名.函数名去调用。而想和2一样,直接方法名。那么如下: from 文件名 import * ,使用的时候直接方法名

from hello import *
peron = greet_user(jj='wo',hh='5')
print(peron)