簡単な実用的な例は、カスタム基準に基づいてリストを並べ替えることです。たとえば、通常のデフォルトの「アスシベット」順序（すべての小文字の文字より上にすべての大文字を置く）とは対照的に、文字列のリストをアルファベット順に並べ替えたいとします。命令的なアプローチでは、ケースに依存しない比較を使用する個別のソート関数を使用または定義する必要があります。一方、機能的な言語では、ソート関数は単にオプションのカスタム比較関数を受け入れることができます。Python（機能的な側面を持つ）は、「sorted（）」が要素ごとに1回呼ばれる「キー」関数を受け入れ、比較に使用される新しい値を返します。ケースに依存しないソート関数を書く方法は次のとおりです。
`` python
ソート（["python"、 "is"、 "pretty"、 "cool"]、key = str.lower）
＃["cool"、 "is"、 "pretty"、 "python"]]
`` `
それをデフォルトの動作と比較してください。
`` python
並べ替え（["python"、 "is"、 "pretty"、 "cool"]）
＃["cool"、 "python"、 "is"、 "pretty"]
`` `
関数は動的に定義することもできます。Pythonの例はデコレーターであり、これは定義されている他の関数を変更する関数です。これは、関数呼び出しを記録するデコレーターの例です。
`` python
def autolog（func）：
    def wrapper（*args、** kwargs）：
        print（f "function {func .__ name__} call"）
        ret = func（*args、** kwargs）
        print（f "returned：{ret}"）
        Ret
    ラッパーを返します

@Autolog
def say_hi（name）：
    print（f "hi、{name}！"）
    「誰かに挨拶しただけだ！」

say_hi（ "Greta"）
＃function say_hi呼び出し
＃こんにちは、グレタ！
＃返された：誰かに挨拶した！
`` `
`@`シンボルは、デコレーターを呼び出すための構文砂糖であることに注意してください。次のコードは同じことを行います。
`` python
def say_hi_unwrapped（name）：
    print（f "hi、{name}！"）
    「誰かに挨拶しただけだ！」

say_hi = autolog（say_hi_unwrapped）
`` `
A simple practical example might be sorting a list based on custom criteria. For example, let's say you want to sort a list of strings alphabetically, as opposed to the usual default "ASCIIbetical" order (putting all uppercase letters above all lowercase ones). Under an imperative approach, you would have to use or define a separate sort function that uses a case-insensitive comparison. In a functional language, on the other hand, the sort function can simply accept an optional custom comparison function. Python (which has functional aspects) takes a similar approach, with `sorted()` accepting a "key" function that is called once per element, returning a new value that will be used for comparisons. Here's how we could write our case-insensitive sorting function:
```python
sorted(["Python", "is", "pretty", "COOL"], key=str.lower)
# ["COOL", "is", "pretty", "Python"]
```
Compare that to the default behavior:
```python
sorted(["Python", "is", "pretty", "COOL"])
# ["COOL", "Python", "is", "pretty"]
```
Functions can also be defined dynamically. An example in Python is decorators, which are functions that modify other functions as they're being defined. Here's an example of a decorator that logs function calls:
```python
def autolog(func):
    def wrapper(*args, **kwargs):
        print(f"Function {func.__name__} called")
        ret = func(*args, **kwargs)
        print(f"Returned: {ret}")
        return ret
    return wrapper

@autolog
def say_hi(name):
    print(f"Hi, {name}!")
    return "I just greeted someone!"

say_hi("Greta")
# Function say_hi called
# Hi, Greta!
# Returned: I just greeted someone!
```
Note that the `@` symbol is syntactic sugar for calling the decorator. The following code does the same thing:
```python
def say_hi_unwrapped(name):
    print(f"Hi, {name}!")
    return "I just greeted someone!"

say_hi = autolog(say_hi_unwrapped)
```